如何为类属性和实例属性定义不同的地址?
这个问题困扰了我很长时间,除非我删除了class属性的定义,但又想使用class属性。
我在类属性和实例属性中定义了一个具有相同名称的字典。如何使内存地址不同?我尝试了各种方法来删除class属性的内容。还有其他方法吗?
我的演示代码如下:
class MyClass:
bar: dict = {}
def __init__(self):
bar: dict = {}
print(id(MyClass.bar))
a = MyClass()
print(id(a.bar))
1914627629760
1914627629760
class MyClass:
bar: dict = {}
def __init__(self):
self.bar = {}
print(id(MyClass.bar))
a = MyClass()
print(id(a.bar))
2318292079808
2318295104384
也就是说,我不知道我们为什么要这样做,而且在接下来的2年内,这几乎有100%的可能会让(下一个)维护这个代码库的人发疯。
解释:
你没有在"储蓄"您的__init__()
函数中的变量
尝试运行:
class MyClass:
def __init__(self):
self.a = 1 # setting attribute a to value 1
b = 2 # b is not an attribute, it's just a local variable
m = MyClass()
print(m.a) # this will work
print(m.b) # this will not