【问题标题】:class inheritance with multiple value return typeError具有多值返回 typeError 的类继承
【发布时间】:2020-08-20 10:29:16
【问题描述】:
class Employees:
    def __init__(self, name, dob, contact, email, address):
        self.name = name
        self.dob = dob
        self.contact = contact
        self.email = email
        self.address = address

    def __str__(self):
        return 'Employees class with basic information '

class Clerks(Employees):
    def __init__(self):
        Employees.__init__(self)
        
    def overtime(self):
        pass
        
class Supervisor(Employees):
    def __init__(self):
        super().__init__()
    
    def get_on_the_piss():
        pass

john = Supervisor('toto','tata', 'titi', 'tete', 'tutu')
TypeError: __init__() takes 1 positional argument but 6 were given

我做到了

john = Supervisor()
TypeError: __init__() missing 5 required positional arguments: 'name', 'dob', 'contact', 'email', and 'address'

我试图缩短问题,所以我不发布。

Clerks class return same result too, 
super(Supervisor, self).__init__() also same result

我查看了很多解决方案,但没有一个是相同的,我找不到任何没有关键字的相关文档。

【问题讨论】:

    标签: python class inheritance constructor


    【解决方案1】:

    Employees 需要 5 个参数,因此您需要将它们从 Supervisor/Clerks 传递给它的基类。
    您可以使用*args**kwargs 来缩短您的代码,或者Supervisor/Clerks 需要至少采用与Employees 相同的参数。

    class Employees:
        def __init__(self, name, dob, contact, email, address):
            self.name = name
            self.dob = dob
            self.contact = contact
            self.email = email
            self.address = address
    
        def __str__(self):
            return 'Employees class with basic information '
    
    class Clerks(Employees):
        def __init__(self, name, dob, contact, email, address):
            super(Clerks, self).__init__(name, dob, contact, email, address)
            
        def overtime(self):
            pass
            
    class Supervisor(Employees):
        def __init__(self, *args, **kwarg):
            super(Supervisor, self).__init__(*args, **kwarg)
        
        def get_on_the_piss():
            pass
    
    
    john = Supervisor('toto','tata', 'titi', 'tete', 'tutu')
    print(john.name)
    
    clara = Clerks('clara','tata', 'titi', 'tete', 'tutu')
    print(clara.name)
    

    输出:

    toto
    clara
    

    【讨论】:

      【解决方案2】:

      问题是主管类继承了员工类,它需要在对象声明时传递所需的参数(即姓名、dob、联系人、电子邮件、地址)。

      所以你需要在创建 john 对象时传递这些参数。就像:

      john = Supervisor('John', '12/4/2020', '97353', 'emailid@host.com', 'India')
      

      与文员类相同:

      clerk1= Supervisor('Rohan', '12/4/2020', '97353', 'emailid@host.com', 'India')
      

      【讨论】:

      • 是的,哥们,我一开始确实通过了,你可以检查最后一行的第一个代码,但莫里斯先生确实指出了问题。欢呼
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 2012-04-05
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 1970-01-01
      相关资源
      最近更新 更多