如何解决实例化对象时,python中的类变量是否充当实例变量?
请考虑以下示例:
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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。