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