0
這裏是我的代碼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
是字典(python中的可變類型),但我有2個不同類的2個不同的對象(從一個Father
類繼承),所以這個想法對我沒有意義。其中簡有number_of_cars
元素? 這個問題發生在Python 2.7.6和Python 3.4.3上。
請解釋爲什麼會發生這種情況!謝謝!
'data'是一個類屬性,而不是一個實例屬性。因此,該類的所有實例都共享相同的屬性。 – Barmar
你需要''父'''__init__'方法''self.data = {}'所以每個實例都有它自己的。 – Barmar
除非這裏的命名有點誤導 - 這裏繼承的使用很奇怪......一個'兄弟'/'姐妹'並不是真的'父親'......他們*有一個'父親'* ...你可能想在OOP和繼承之前進行更深入的研究 –