StoryEdit 開発日誌

ウェブアプリ StoryEditを作ってましたが延期。普通のブログ。

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__いるし。笑
後日追求する必要あり。