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

How to define different addresses for class attributes and instance attributes?

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

这个问题困扰了我很久,除非删除了class属性的定义,但是又想使用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

就是说,我不知道我们为什么要这样做,而且几乎 100% 的可能性这会让(下一个)维护此代码库的人在未来 2 年内发疯。

解释:

您没有在 __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