class Hoge(object):
def foo(self):
self.piyo = 1
ができないと思っていた。__init__の中だけだと思っていたが違う。
In [1]: class Hoge(object):
...: def foo(self):
...: self.piyo = 1
...:
In [2]: h = Hoge()
In [3]: h.piyo
---------------------------------------------------------------------------
exceptions.AttributeError Traceback (most recent call last)
/home/nori/Desktop/work/wxpygammon/src/
AttributeError: 'Hoge' object has no attribute 'piyo'
In [4]: h.foo()
In [5]: h.piyo
Out[5]: 1
まあ、必然的な理由がない限りやらないほうが、混乱を避けられるから好ましいだろうが。
メソッド内と外部からでは__dict__へのアクセスレベルが違うということだろう。
外からでは__dict__に対してkey Errorになるようなupdateをかけられない。
また、メソッド内での代入typoには注意したほうがいいですね。
7.6 クラス定義
プログラマのための注釈: クラス定義内で定義された変数はクラス変数です; クラス変数は全てのインスタンス間で共有されます。インスタンス変数を定義するには、__init__() メソッドや他のメソッド中で変数に値を与えます。クラス変数もインスタンス変数も ``self.name'' 表記でアクセスすることができます。この表記でアクセスする場合、インスタンス変数は同名のクラス変数を隠蔽します。変更不能な値をもつクラス変数は、インスタンス変数のデフォルト値として使えます。新形式のクラスでは、デスクリプタを使ってインスタンス変数の振舞いを変更できます。
0 件のコメント:
コメントを投稿