すごい昔のエントリですが、コメントできなくなってたんでTBで。
やっぱり、インスタンス変数(クラス変数も!)は先頭で宣言しないと気持ち悪い。だから、初期化の必要がなくても以下のように書いておく。
class Hoge: #名前 name = None def __init__(self, name): self.name = name
気持ちはとてもとてもよくわかるんですけど、class宣言の中に変数を置いてもそれはあくまでもclassオブジェクトに紐づく値となってしまい、インスタンスの変数とはなりません。もちろん、わかってて使うなら大丈夫ですけど。
>>> class Hoge(object): ... foo = 10 >>> hoge1 = Hoge() >>> Hoge.__dict__.items() [('__dict__', <attribute '__dict__' of 'Hoge' objects>), ('__module__', '__main__'), ('foo', 10), ('__weakref__', <attribute '__weakref__' of 'Hoge' objects>), ('__doc__', None)] # ↑ここにfooはあるけど・・・ >>> hoge1.__dict__ {} # ↑hoge1はfooを持ってない
ドキュメントにも言及されてて、デフォルト値として使ってもいいけどミュータブルな値を使うと予期しない結果になると書かれてます。
Variables defined in the class definition are class variables; they are shared by all instances.
To create instance variables, they can be set in a method with self.name = value....中略...
Class variables can be used as defaults for instance variables, but using mutable values there can lead to unexpected results.