当我们示例化一个对象时,类变量在python中的行为是否与示例变量相同?

wmomyfyw  于 2023-01-10  发布在  Python
关注(0)|答案(1)|浏览(143)

请看下面的例子:

class Ciao():
    a = 1 
    def whatIsIt(self):
        print(self.a)

i = Ciao()
i.a = 2
i.whatIsIt() #Returns 2

我正在创建类Ciao的一个示例,修改类变量,然后在最后一行打印它,对我来说,类变量a在创建了对象i之后,其行为完全与此代码片段中的示例变量相同。

class Ciao2():
    def __init__(self):
        self.a = None
    def whatIsIt(self):
        print(self.a)
i = Ciao2()
i.a = 2
i.whatIsIt() #Returns 2

在示例化对象之后,类和示例变量之间有什么根本的区别吗?

shyt4zoc

shyt4zoc1#

是的,这是一个根本的区别。当变量是可变的(例如列表),并且你使用同一个类的多个示例时,就可以看出这一点。对类变量的更改会影响到所有的示例,但对示例变量的更改不会:

class Ciao():
    a = [1]
    
    def __init__(self):
        self.b = [1]
        
        
i1 = Ciao()
print(i1.a, i1.b)  # [1] [1]
i1.a.append(2)
i1.b.append(2)
print(i1.a, i1.b)  # [1, 2] [1, 2]

i2 = Ciao()
print(i2.a, i2.b)  # [1, 2] [1]

相关问题