这是我的密码
import json
class Father(object):
data = {}
def set_name(self, name):
self.data['name'] = name
def dump_data(self):
print(json.dumps(self.data))
class Brother(Father):
def __init__(self, name, number_of_cars):
self.set_name(name)
self.set_number_of_cars(number_of_cars)
def set_number_of_cars(self, n):
self.data['number_of_cars'] = n
class Sister(Father):
def __init__(self, name, number_of_dolls):
self.set_name(name)
self.set_number_of_dolls(number_of_dolls)
def set_number_of_dolls(self, n):
self.data['number_of_dolls'] = n
child = Brother('Brother John', 5)
child.dump_data()
child = Sister('Sister Jane', 30)
child.dump_data()
我所期望的是
{"name": "Brother John", "number_of_cars": 5}
{"name": "Sister Jane", "number_of_dolls": 30}
但是,结果是
{"name": "Brother John", "number_of_cars": 5}
{"number_of_dolls": 30, "name": "Sister Jane", "number_of_cars": 5}
如果我这样改变,结果还是一样的
child1 = Sister('Sister Jane', 30)
child1.dump_data()
我不知道为什么这个问题会发生。我想是因为我使用了Father
类的data
属性,data
是dictionary(python中的可变类型),但是我有两个不同类的2个不同对象(从一个Father
类继承),所以这个想法对我来说没有意义。简在哪里有number_of_cars
元素?
这个问题发生在python2.7.6和python3.4.3上
请告诉我为什么会这样!谢谢你
问题是您将
data
初始化为类属性,而不是实例属性你必须把
data = {}
移到Father.__init__()
作为self.data = {}
你会得到预期的结果:
相关问题 更多 >
编程相关推荐