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的这种行为以及它背后的逻辑.这是某种设计缺陷还是我做错了什么并且应该退出编程?
通过在成员函数的上下文之外创建这些变量,您无意中创建了一个类变量.
类变量可以被每个类实例访问,并且可以直接从类本身访问而无需实例化.
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.