我遇到问题的一些代码:
# a connector
class conn():
def __init__(self, name):
self.name = name
# a device base class
class imper_dev():
names = []
conns = {}
def __init__(self):
for name in self.names:
self.conns[name] = conn(name)
# a real device
class dev(imper_dev):
names = ['a']
# some instances of it
d1 = dev()
d2 = dev()
>>> d1.conns['a']
<__main__.conn object at 0x7fd68871c630>
>>> d2.conns['a']
<__main__.conn object at 0x7fd68871c630>
我对这种行为感到有些惊讶。我的目的是创建具有独立连接器的dev()
实例。为什么d1
和d2
的实例conns['a']
和data.table
的引用相同?
答案 0 :(得分:0)
conns
是class variable,这意味着变量在dev
类的所有实例之间共享。
请注意,d1
和d2
实际上是不同的对象,此处仅共享conns
和names
。
>>> d1
<__main__.dev instance at 0x7fb757329050>
>>> d2
<__main__.dev instance at 0x7fb7573290e0>