为什么类属性中的列表实例化后仍然是类属性,而不是实例属性?

jar*_*ied 0 python class instance

我有一个带有属性的类和一个带有空值的列表。当生成a和b的两个实例并向属性添加元素时,发现属性没有实例化。使用id查看a.property和b.property。内存地址是一样的。为什么?

如何才能property attribute成为instance attribute

我的代码示例如下:

class MyClass:
    property = []

    def __init__(self):
        pass

    def append(self, value):
        self.property.append(value)


a = MyClass()
b = MyClass()
a.append(1)
print(a.property)
b.append(1)

print(a.property)
print(b.property)

print(id(a.property))
print(id(b.property))

Run Code Online (Sandbox Code Playgroud)

结果是:

[1]
[1, 1]
[1, 1]
1866383694784
1866383694784
Run Code Online (Sandbox Code Playgroud)

我尊重的结果:

[1]
[1]
[1]
Run Code Online (Sandbox Code Playgroud)

M Λ*_*I K 5

在您的例子中property = []是一个类变量,它与您的类的所有实例共享。我认为,您不想property = []与其他班级分享 的价值。这意味着您需要一个实例变量,可以如下定义。

class MyClass:
    def __init__(self):
        self.property = []

    def append(self, value):
        self.property.append(value)
Run Code Online (Sandbox Code Playgroud)

这应该会给你你预期的输出,纯粹!