開発環境
- 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 コメント:
コメントを投稿