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