class Hoge:と、class Hoge(object):の違い
定義は以下のとおり。
class Hoge: def __init__(self): self.x = 'hoge' class Hoge(object): def __init__(self): self.x = 'hoge'
これをhelp()で比較してみた。
Help on class Hoge in module __main__: class Hoge | Methods defined here: | | __init__(self)
Help on class Hoge in module __main__: class Hoge(__builtin__.object) | Methods defined here: | | __init__(self) | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined)
とまぁ、このとおり。
__builtin__.objectを継承すると、__dict__とか、__weakref__とかのメソッドが追加される。
__dict__はわかるとして、__weakref__ってなんや。笑
追記:
http://docs.python.org/2/library/weakref.html
ということで、いわゆる弱参照を保持する為のもの。
うーん、、、__dict__は、dynamic assignmentを可能にするためのものだと理解していたが、objectを継承しないのに、self.xに値を保持できるのはなんでだ?
とおもい、object継承なしのHogeで実験。
>>> h = Hoge() >>> h.x 'hoge' >>> h.x = 'hi' >>> h.x 'hi' >>> h.y = 'bu' >>> h.y 'bu' >>> h.__dict__ {'y': 'bu', 'x': 'hi'}
んん?__dict__いるし。笑
後日追求する必要あり。