Skip to main content
 首页 » 编程设计

python之Python 类声明中的变量用法

2025年05月04日18shanyou

这是 Zed Shaw 的“用艰难的方式学习 Python”教程 40 中的代码片段:

class Song(object): 
 
    def __init__(self, lyrics): 
        self.lyrics = lyrics 
 
    def sing_me_a_song(self): 
        for line in self.lyrics: 
            print line 

为什么Python在定义“sing_me_a_song”函数时允许使用“self.lyrics”?是因为无论变量 在“init”下定义的也可以在同一个类的其他地方使用吗?

谢谢。

请您参考如下方法:

实例变量

这称为实例变量。以 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 类的一个方法。这与常规的旧函数不同,因为它从根本上与类相关联,因此也与该类的对象相关联。