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

Yog*_*dav 2 python dictionary class list instance

我从最近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
Run Code Online (Sandbox Code Playgroud)

为什么输出

instance1_child1 -> Instance 1 child 1
instance2_child1 -> Instance 2 child 1
Run Code Online (Sandbox Code Playgroud)

对于我正在创建的所有对象,似乎只有一个dict()实例.我也检查了list [],他们的行为也是一样的.

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

Aks*_*jan 7

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

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

Example.children == Example().children
>>> True
Run Code Online (Sandbox Code Playgroud)

想想相当于一个类中定义的全局变量,你就得到了答案.


要纠正这个问题,只需将它们置于上下文中即可__init__.

class Example(object):

    def __init__(self):
        self.children = {}
Run Code Online (Sandbox Code Playgroud)

现在children绑定到类实例,而不是类本身.这就是力量self.