【发布时间】:2014-08-30 10:57:54
【问题描述】:
我有一个关于赋值时类变量范围持久性的问题。
我有一个字典作为类变量,一旦我将另一个字典分配给实例方法中的变量,范围似乎丢失并且值不再在实例之间保留。
这里是sn-p的代码:
class MyBaseClass(object):
my_class_dict = {}
def __init__(self):
print "Keys length: ", len(self.my_class_dict)
if not len(self.my_class_dict.keys()):
print "Initializing my_class_dict."
# VERION 1
# self.my_class_dict.update({1:2})
# VERSION 2
# self.my_class_dict = {1:2}
# VERSION 3
self.my_class_dict[1] = 2
class MyChildClass1(MyBaseClass):
def __init__(self):
super(MyChildClass1, self).__init__()
class MyChildClass2(MyBaseClass):
def __init__(self):
super(MyChildClass2, self).__init__()
if __name__=='__main__':
child_1 = MyChildClass1()
child_2 = MyChildClass2()
print child_1.my_class_dict
print child_2.my_class_dict
这是结果。
版本 1(1 个初始化,作用域持久化)
Keys length: 0
Initializing my_class_dict.
Keys length: 1
{1: 2}
{1: 2}
版本 2(2 次初始化,范围丢失)
Keys length: 0
Initializing my_class_dict.
Keys length: 0
Initializing my_class_dict.
{1: 2}
{1: 2}
版本 3(1 个初始化,作用域持久化)
Keys length: 0
Initializing my_class_dict.
Keys length: 1
{1: 2}
{1: 2}
所以看起来范围似乎只在完整的对象分配时丢失。为什么会这样?这样做的理由是什么?
【问题讨论】:
标签: python scope initialization variable-assignment class-variables