不同实例中对同一对象的意外引用(python)

2024-10-03 13:25:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我对某些代码有问题:

# 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()实例。为什么两个实例d1d2conns['a']有相同的引用


Tags: namedevselfobjectnamesinitmaindevice
1条回答
网友
1楼 · 发布于 2024-10-03 13:25:41

conns是一个class variable,这意味着变量在dev类的所有实例之间共享。 注意d1d2实际上是不同的对象,这里只共享connsnames

>>> d1
<__main__.dev instance at 0x7fb757329050>
>>> d2
<__main__.dev instance at 0x7fb7573290e0>

相关问题 更多 >