Here is my code
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()
What I expected is
{"name": "Brother John", "number_of_cars": 5}
{"name": "Sister Jane", "number_of_dolls": 30}
But, the result is
{"name": "Brother John", "number_of_cars": 5}
{"number_of_dolls": 30, "name": "Sister Jane", "number_of_cars": 5}
And the result is still the same if I change like this
child1 = Sister('Sister Jane', 30)
child1.dump_data()
I don't know why this issue happens. I thought because I use the data
attribute of Father
class and data
is dictionary (a mutable type in python), but I have 2 different objects of 2 different classes (inherited from one Father
class), so that idea does not make sense to me. Where Jane have number_of_cars
element?
The issue occurs on both Python 2.7.6 and Python 3.4.3.
Please explain me why this happens! Thank you!