Python中子类如何正确继承抽象基类构造函数的已实现功能?
Python 抽象类子类继承父类构造逻辑的修正方案
你原有代码的错误来自两处:
super()参数配置错误:super(AbstractClass, self)的作用是查找AbstractClass的父类方法,自然不会执行AbstractClass自身的构造逻辑。Python 3中可直接使用无参super()指代当前子类的父类,也可以显式写为super(Employee, self)。- 父类构造参数不匹配:
AbstractClass的__init__方法要求传入参数n,你调用时没有传参会触发参数校验报错。
以下是修正后的可运行代码:
from abc import ABCMeta, abstractmethod class AbstractClass(object, metaclass=ABCMeta): @abstractmethod def __init__(self, n): self.n = n print('the salary information') class Employee(AbstractClass): def __init__(self, salary, name): self.salary = salary self.name = name # 调用父类构造函数,可根据业务需求传入对应参数给n,此处示例传入薪资 super().__init__(salary) emp1 = Employee(1000000, "Tom") print(emp1.salary) print(emp1.name)
运行后会先输出the salary information,再依次输出薪资和姓名,符合你要复用父类构造逻辑的需求。
内容的提问来源于stack exchange,提问作者user297850
相关产品推荐
相关产品推荐

