我無法理解繼承中實例變量的邏輯。 這是我(簡化)代碼註釋解釋我是如何理解它的行爲:在派生類中訪問已更改的基類實例屬性
class Main(object):
def __init__(self):
self.p = Parent() # self.parameter = []
self.c = Child() # self.parameter = []
def run(self):
self.p.setting() # assigning value to self.parameter
self.c.getting()
class Parent(object):
def __init__(self):
self.parameter = []
def setting(self):
self.parameter = [1, 2, 3]
class Child(Parent):
# not redefining __init__, so Parent __init__ is called
def getting(self):
# value was assigned to self.parameter in setting method,
# called before getting
print self.parameter
Main().run()
getting
打印[]
,而不是[1, 2, 3]
我的預期。爲什麼這樣?由於Child
股__init__
與Parent
,在開始self.parameter = []
兩者,但爲什麼它仍然是[]
時,它被分配一個值很長的Child().__init__
被稱爲?我應該怎麼做才能在getting
中更改self.parameter
值?
Python是不是Java;不是每件事都必須是一個階級。擺脫'Main'。 – chepner