我想了解继承如何在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