问题描述
请考虑以下示例:
class Ciao():
a = 1
def whatIsIt(self):
print(self.a)
i = Ciao()
i.a = 2
i.whatIsIt() #Returns 2
我正在创建类Ciao的实例,修改类变量,然后在最后一行中将其打印出来。对我来说,在创建对象i之后,类变量a完全像该代码段中的实例变量一样起作用。
class Ciao2():
def __init__(self):
self.a = None
def whatIsIt(self):
print(self.a)
i = Ciao2()
i.a = 2
i.whatIsIt() #Returns 2
实例化对象后,类和实例变量之间是否有根本区别?
解决方法
是的,有根本的区别。可以看到变量是可变的(例如列表),并且您使用同一类的多个实例。对类变量所做的更改将继承所有实例,但对实例变量所做的更改将不会:
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]