我有一个带有属性的类和一个带有空值的列表。当生成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))
结果是:
[1]
[1, 1]
[1, 1]
1866383694784
1866383694784
我尊重的结果:
[1]
[1]
[1]
在您的情况下,
property = []
是一个类变量,与您的类的所有实例共享。我认为,您不想与其他类分享 property = []
的值。这意味着您需要一个实例变量,可以像下面这样定义它。
class MyClass:
def __init__(self):
self.property = []
def append(self, value):
self.property.append(value)
这应该会给你预期的输出,纯粹!
发生这种情况是因为您没有在
property
函数内声明 __init__
。__init__
,所以我想这就是您正在寻找的。class MyClass:
def __init__(self):
self.property = []
def append(self, value):
self.property.append(value)