我想了解繼承如何在Python中工作。我正在看一個簡單的代碼,有一件事讓我感到困惑。代碼如下:Python中的繼承基礎知識
class Person:
def __init__(self, first, last):
self.firstname = first
self.lastname = last
def Name(self):
return self.firstname + " " + self.lastname
class Employee(Person):
def __init__(self, first, last, staffnum):
Person.__init__(self,first, last)
self.staffnumber = staffnum
def GetEmployee(self):
return self.Name() + ", " + self.staffnumber
x = Person("Marge", "Simpson")
y = Employee("Homer", "Simpson","1007")
print(x.Name())
print(y.GetEmployee())
我的問題是,在再次使用時Person.__init__()
調用基類的構造函數,但是當我們調用名稱()基類的方法,而不是使用「人」,我們使用「自」。有人可以澄清這種困惑,我瞭解Python的繼承是如何工作的?
這不是很pythonic的代碼,可能不是最好的學習!但是請注意,只有當子類沒有實現'method' **時,纔可以使用'self.method'來訪問超類實現**。這裏的子類實現了'__init__',所以需要明確地訪問超類的版本(雖然它應該用'super'來實現),但是不實現'Name'。嘗試改變它,看看會發生什麼! – jonrsharpe
還有一個問題,當我們需要調用一個父類的方法時,我們需要傳遞孩子(自我)作爲參數。爲什麼? –
因爲你沒有使用'super(Employee,self).__ init __(first,last)'。搜索綁定與未綁定方法的信息; 'self.Name'被綁定,'Person .__ init__'被解除綁定。 – jonrsharpe