如何为类属性和实例属性定义不同的地址?



如何为类属性和实例属性定义不同的地址?

这个问题困扰了我很长时间,除非我删除了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

相关内容

  • 没有找到相关文章

最新更新