【问题标题】:My parent class __init__() has three parameters and I want to use only two of its parameters?我的父类 __init__() 有三个参数,我只想使用它的两个参数?
【发布时间】:2020-09-25 15:02:55
【问题描述】:

我有这个类,我只想将它的两个初始化参数继承给子类

注意
在这里,我对 Employee 和 Manager 没有任何顾虑,但我一般询问语法,即我的子类中的 init() 方法是否正确?或者我需要在超类中获取确切数量的参数

class Employee:

    def __init__(self,Ename,Eid,Esalary):
        self.Ename = Ename
        self.Eid = Eid
        self.Esalary = Esalary

    def emp_details(self):
        print(f"The employee name is {self.Ename}")

class Manager(Employee):
    def __init__(self,Ename,Esalary):
        super().__init__(Ename,Esalary)



e1 = Employee("TestE","A12E",12000)
mgr_1 = Manager("TestM",100000)

但它抛出一个错误
类型错误:__init__() 缺少 1 个必需的位置参数:'Esalary'

以及如何只继承它的两个__init()__参数

【问题讨论】:

  • 您已经编写了Employee,因此要创建Employee,您必须提供EidManagerEmployee,所以 Eid 必须来自某个地方。
  • 为什么经理没有身份证?如果不是,它可能不应该从 Employee 继承,或者 id 并不是所有员工的真正属性,而是 Employee 的不同子类。
  • super().__init__(...)中的第三个参数必须填写一些内容。也许“无”就足够了。
  • 作为一般规则,您可以向子类添加东西,但不能删除东西。
  • @khelwood 想象一个经理没有任何开斋节一般情况下如何只继承它的两个参数

标签: python oop inheritance super


【解决方案1】:

您在 Employee 的构造函数中缺少一个参数。在 Employe 的构造函数中,你有三个参数,而在下面你只给了两个,所以一定要给它三个。

【讨论】:

  • 假设我想子类中只有两个参数,那该怎么办呢?
  • 可能你可以在你的构造函数中有一个默认值,就像def __init__(self,Ename,Eid=0,Esalary) 这样即使参数丢失,你仍然可以有一个值。第二个选项是将子类中的第三个参数设置为“无”
  • 你不能给Eid一个默认值,因为它后面跟着非默认参数Esalary
【解决方案2】:

由于 Manager 是 Employee 的子类,Manager 也是一个 Employee... 并且按照这个逻辑,Manager 也应该有 Eid。

如果您的问题仅用于教育目的,则必须调用 super()。init 带有 3 个参数。

如果您的问题是针对某个实际项目,并且您非常确定 Manager 不应该有 Eid,那么请重新考虑更改类设计(即删除类继承)。

【讨论】:

  • 有没有什么办法可以在子类中使用init方法,只有两个参数??
【解决方案3】:

像下面这样的东西在技术上是可行的,但毫无意义。

   class Manager(Employee):
       def __init__(self,Ename,Esalary):
           super().__init__(Ename,None,Esalary) 

但是,以下内容可能有一些含义(但不是一个好的做法)。


class Employee:

    def __init__(self,Ename,designation,Esalary):
        self.Ename = Ename
        self.designation = designation
        self.Esalary = Esalary

    def emp_details(self):
        print(f"The employee name is {self.Ename}")


class Manager(Employee):
    def __init__(self,Ename,Esalary):
        super().__init__(Ename,'Manager',Esalary)

【讨论】:

    【解决方案4】:

    尝试将“无”值分配给您的第三个参数。做这样的事情:

    class Manager(Employee):
        def __init__(self,Ename,Esalary):
            self.Eid = None
            super().__init__(Ename,Eid,Esalary)
    

    【讨论】:

    • 这会给你一个NameError,因为你引用了一个你没有创建的变量Eidself.EidEid 不同。
    【解决方案5】:

    试试这个:

    class Employee:
    
        def __init__(self,Ename,Eid,Esalary):
            self.Ename = Ename
            self.Eid = Eid
            self.Esalary = Esalary
    
        def emp_details(self):
            print(f"The employee name is {self.Ename}")
    
    class Manager(Employee):
        def __init__(self,Ename,Esalary):
            Eid=""
            super().__init__(Ename,Eid,Esalary)
    
    
    e1 = Employee("TestE","A12E",12000)
    mgr_1 = Manager("TestM",100000)
    mgr_1.emp_details()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-24
      • 1970-01-01
      • 1970-01-01
      • 2022-10-13
      • 1970-01-01
      • 2019-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多