为什么在Python中,派生类的两个不同实例与基类共享相同的数据属性值?

2024-06-17 15:38:24 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我有一个子类继承自基类,该基类的init()将项添加到数组中,如下所示:

class TestBaseClass : 
    arr = []

    def __init__(self) : 
        print self.arr
        self.arr.append(1)
        print self.arr
        return

class TestChildClass1(TestBaseClass) : 
    foo = 1

然后我发现奇怪的是,当我实例化子类两次时

^{pr2}$

第二个数组似乎没有空数组,但包含第一个数组加上的值1。在

为什么基类实例由两个实例共享而不是作为新实例创建?从直觉上看,这似乎不是人们期望继承的行为方式。在


Tags: 实例selfreturnfooinitdef数组基类
1条回答
网友
1楼 · 发布于 2024-06-17 15:38:24
class TestBaseClass : 
    arr = []

这里,您创建的是类变量,而不是实例变量。因此,这将被类的所有实例共享。要创建实例变量,最好将成员变量添加到初始值设定项函数(__init__)中的当前对象,如下所示

^{pr2}$

因为我们将arr添加到当前对象(self),所以每当您创建类的对象时,都会创建新的变量。在

相关问题 更多 >