实例化对象时,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]

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...