如何为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
如何为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