開発環境
- OS X Lion - Apple(OS)
- BBEdit - Bare Bones Software, Inc.(Text Editor)
- Script言語: Python
『初めてのPython 第3版』(Mark Lutz 著、夏目 大 訳、オライリー・ジャパン、2009年、ISBN978-4-87311-393-7) のVI部(オブジェクト指向プログラミング)のまとめ演習6.(__bases__属性)を解いてみる。
その他参考書籍
6.(__bases__属性)
コード(BBEdit)
sample.py
#!/usr/bin/env python3.3 #-*- coding: utf-8 -*- class Lister: def __repr__(self): return ("<Instance of {0}({1}), address {2}:\n{3}>".format( self.__class__.__name__, self.superclasses(self.__class__), id(self), self.attrnames())) def attrnames(self): result = '' for attr in self.__dict__.keys(): if attr[:2] == '__': result += "\tname {0}=<built-in>\n".format(attr) else: result += "\tname {0}={1}\n".format(attr, self.__dict__[attr]) for cls in self.__class__.__bases__: result += self.cls_attrnames(cls) return result def superclasses(self, cls): result = "" first = 1 for superclass in cls.__bases__: if not first: result += ", " first = 0 result = result + superclass.__name__ if superclass.__bases__: result += "({0})".format(self.superclasses(superclass)) return result def cls_attrnames(self, cls): result = "\tclass {0}\n".format(cls.__name__) if not dir(cls): result += "\tno attribute\n" for name in dir(cls): if name[:2] == '__': result += "\tname {0}<built-in>\n".format(name) else: result += "\tname {0}={1}\n".format(name, getattr(cls, name)) return result class Super: def __init__(self): self.data1 = "spam" class Sub(Super, Lister): def __init__(self): Super.__init__(self) self.data2 = "eggs" self.data3 = 42 if __name__ == '__main__': sub = Sub() print(sub)
入出力結果(Terminal)
$ ./sample.py <Instance of Sub(Super(object), Lister(object)), address 4485777680: name data2=eggs name data3=42 name data1=spam class Super name __class__<built-in> name __delattr__<built-in> name __dict__<built-in> name __dir__<built-in> name __doc__<built-in> name __eq__<built-in> name __format__<built-in> name __ge__<built-in> name __getattribute__<built-in> name __gt__<built-in> name __hash__<built-in> name __init__<built-in> name __le__<built-in> name __lt__<built-in> name __module__<built-in> name __ne__<built-in> name __new__<built-in> name __qualname__<built-in> name __reduce__<built-in> name __reduce_ex__<built-in> name __repr__<built-in> name __setattr__<built-in> name __sizeof__<built-in> name __str__<built-in> name __subclasshook__<built-in> name __weakref__<built-in> class Lister name __class__<built-in> name __delattr__<built-in> name __dict__<built-in> name __dir__<built-in> name __doc__<built-in> name __eq__<built-in> name __format__<built-in> name __ge__<built-in> name __getattribute__<built-in> name __gt__<built-in> name __hash__<built-in> name __init__<built-in> name __le__<built-in> name __lt__<built-in> name __module__<built-in> name __ne__<built-in> name __new__<built-in> name __qualname__<built-in> name __reduce__<built-in> name __reduce_ex__<built-in> name __repr__<built-in> name __setattr__<built-in> name __sizeof__<built-in> name __str__<built-in> name __subclasshook__<built-in> name __weakref__<built-in> name attrnames=<function Lister.attrnames at 0x10b604170> name cls_attrnames=<function Lister.cls_attrnames at 0x10b604290> name superclasses=<function Lister.superclasses at 0x10b604200> > $
0 コメント:
コメントを投稿