gpt4 book ai didi

python dict,列表对所有类都有相同的实例

转载 作者:行者123 更新时间:2023-11-28 20:18:20 26 4
gpt4 key购买 nike

过去 3 个月我一直在研究 python 2.7,今天注意到这一点后我真的很惊讶。

对于下面的代码片段

class Example:
children = {}

instance1 = Example()
instance1.children['instance1_child1'] = 'Instance 1 child 1'

instance2 = Example()
instance2.children['instance2_child1'] = 'Instance 2 child 1'
for key, value in instance2.children.items():
print key + ' -> ' + value

为什么输出是

instance1_child1 -> Instance 1 child 1
instance2_child1 -> Instance 2 child 1

对于我正在创建的所有对象,似乎只有一个 dict() 实例。我也检查了 list[],它们的行为方式也相同。

我无法理解python的这种行为及其背后的逻辑。这是某种设计缺陷还是我做错了什么并且应该退出编程?

最佳答案

通过在成员函数上下文之外创建这些变量,您无意中创建了一个类变量

每个类实例都可以访问类变量,并且可以直接从类本身访问而无需实例化。

Example.children == Example().children
>>> True

想想类中定义的全局变量的等价物,您就有了答案。


要纠正这个问题,只需将它们放在 __init__ 的上下文中。

class Example(object):

def __init__(self):
self.children = {}

现在 children 绑定(bind)到类 instance,而不是类本身。这就是 self 的力量。

关于python dict,列表对所有类都有相同的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36907586/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com