实例变量
这称为实例变量。任何定义为“前缀”的变量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
。这与常规的旧函数不同,因为它从根本上与类相关联,因此也与该类的对象相关联。