インスタンス変数
これをインスタンス変数と呼びます。self.
「プレフィックス」として定義された変数は、オブジェクトの任意のメソッドで使用できます。通常、このような変数は で作成される__init__
ため、オブジェクトが初期化された瞬間からアクセスできますが、他のメソッドでインスタンス変数を定義することもできます。例えば:
>>> class foo:
... def fun(self):
... self.heh=3
...
>>> f = foo()
>>> f.heh
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: foo instance has no attribute 'heh'
>>> f.fun()
>>> f.heh
3
の外部でインスタンス変数を初期化する際の危険性に注意してください__init__
。それらにアクセスしようとする前に、それらが初期化されているメソッドが呼び出されていない場合、エラーが発生します。
クラス変数
これを、クラスの任意のメソッドからアクセスできる別のタイプの変数である「クラス変数」と混同しないでください。クラス変数は、そのクラスの特定のオブジェクトだけでなく、クラス全体に対して設定できます。違いを示すために、インスタンス変数とクラス変数の両方を持つクラスの例を次に示します。
class MyClass:
classVar = "I'm a class var."
def __init__(self):
self.instanceVar = "I'm an instance var."
def fun(self):
methodVar = "I'm a method var; I cannot be accessed outside of this method."
self.instanceVar2 = "I'm another instance var, set outside of __init__."
「メソッド」と「関数」に関する注意
あなたの質問ではsing_me_a_song
、「関数」と呼んでいます。実際には、クラスのメソッドSong
です。これは通常の古い関数とは異なります。これは、基本的にクラスとリンクされているため、そのクラスのオブジェクトにもリンクされているためです。