Python类实例共享属性问题:如何创建独立的deck实例?
为什么两个Deck实例的cards完全相同?如何创建独立实例?
哈哈,这个问题我刚学Python的时候也踩过一模一样的坑!你的问题核心出在类属性和实例属性的区别上。
先看你写的代码:
class deck: cards ={} # 这里定义的是类属性 def __init__(self, key, value): self.cards[key]=value return
这里的cards是定义在类层级的属性,它属于整个deck类本身,而不是某个具体的实例。也就是说,所有deck的实例都会共享这同一个字典——不管你创建多少个实例,它们操作的都是同一个cards对象,所以obj1和obj2的cards自然会完全一样。
要让每个实例拥有独立的cards,你需要把cards变成实例属性,也就是把它放到__init__方法里,绑定到self上:
修正后的代码:
class deck: def __init__(self, key, value): self.cards = {} # 每个实例初始化时创建属于自己的字典 self.cards[key] = value # 测试效果 obj1 = deck("a", "1") obj2 = deck("b", "2") print(obj1.cards, obj2.cards) # 输出: {'a': '1'} {'b': '2'}
这样一来,每个deck实例在初始化的时候都会创建专属自己的cards字典,彼此之间的操作就不会互相影响啦。
内容的提问来源于stack exchange,提问作者Silicon Creature
相关产品推荐
相关产品推荐

