Python:对象可以添加或编辑其“兄弟”的值吗?

2024-05-29 02:58:05 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我的密码

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上

请告诉我为什么会这样!谢谢你


Tags: ofnameselfchildnumberdatadefsister
1条回答
网友
1楼 · 发布于 2024-05-29 02:58:05

问题是您将data初始化为类属性,而不是实例属性

你必须把data = {}移到Father.__init__()作为self.data = {}

import json


class Father(object):
    def __init__(self):
        self.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):
        super(Brother, self).__init__()
        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):
        super(Sister, self).__init__()
        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()

你会得到预期的结果:

{"number_of_cars": 5, "name": "Brother John"}
{"number_of_dolls": 30, "name": "Sister Jane"}

相关问题 更多 >

    热门问题