![](/img/trans.png)
[英]Python super: calling a base class method which contains another base class method that is overriden by derived class
[英]Run Overriden Method Automatically From Base Class
在继承的情况下,从每个孩子覆盖的基类中自动运行方法的最佳方法是什么。 在下面,我实现了print_info以自动从基类Person运行,但是当我初始化子类时,我收到一个错误,因为看来print_info仅从基类而非子类运行。
class Person:
def __init__(self, fname, lname):
self.fname = fname
self.lname = lname
self.print_info()
def print_info(self):
print('{} {}'.format(self.fname, self.lname))
class Employee(Person):
def __init__(self, fname, lname, employee_code):
super().__init__(fname, lname)
self.employee_code = employee_code
def print_info(self):
print('{} {} has employee code {}'.format(self.fname, self.lname, self.employee_code))
e = Employee('Jon', 'Taylor', 'jtaylor')
错误
AttributeError: 'Employee' object has no attribute 'employee_code'
问题在于,在您调用print_info()
self.employee_code
尚未定义,因为在分配超类之前会调用它的构造函数。 一种可能性是对子类的构造函数重新排序:
class Employee(Person):
def __init__(self, fname, lname, employee_code):
self.employee_code = employee_code
super().__init__(fname, lname)
通常不建议这样做,因为最佳实践是先调用超类的构造函数,然后再调用子类的构造函数中的其他任何东西,但是您可以这样做。
请注意,仅当您在构造函数中使用重写方法(取决于子类数据)时,才会出现问题,通常可以使用超类代码中的重写方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.