クラス変数を作成する場合は、クラス メソッドの外側で宣言する必要があります (ただし、クラス定義の内側で宣言する必要があります)。
class Example(object):
somevariable = 'class variable'
これで、クラス変数にアクセスできるようになりました。
>> Example.somevariable
'class variable'
例が機能しない理由は、instance
変数に値を割り当てているためです。
2 つの違いはclass
、クラス オブジェクトが作成されるとすぐに変数が作成されることです。一方、instance
変数は、オブジェクトがインスタンス化され、割り当てられた後にのみ作成されます。
class Example(object):
def doSomething(self):
self.othervariable = 'instance variable'
>> foo = Example()
ここでは のインスタンスを作成しましたがExample
、アクセスしようとするothervariable
とエラーが発生します。
>> foo.othervariable
AttributeError: 'Example' object has no attribute 'othervariable'
othervariable
は内部で割り当てられているためdoSomething
(そして、ityet を呼び出していないため)、存在しません。
>> foo.doSomething()
>> foo.othervariable
'instance variable'
__init__
クラスのインスタンス化が発生するたびに自動的に呼び出される特別なメソッドです。
class Example(object):
def __init__(self):
self.othervariable = 'instance variable'
>> foo = Example()
>> foo.othervariable
'instance variable'