子类继承父类的时候 需要把父类里面的所有参数写一遍吗?那要是多重继承 祖先类的 入参怎么写?

来源:3-4 Python中的多态

bingzai

2024-03-15 10:59

class Person(object):

    def __init__(self, name, gender):

        self.name = name

        self.gender = gender

class Student(Person):

    def __init__(self, name, gender, score):

        super(Student, self).__init__(name, gender)

        self.score = score

class Boos(object):

    def __init__(self, boosName, boosGender):

        self.boosName = boosName

        self.boosGender = boosGender

class Teacher(Student,Boos):

    def __init__(self, name, gender, score,course,boosName, boosGender):

        super(Teacher, self).__init__(name, gender, score,boosName, boosGender)

        self.course = course


        

问题1: 多重继承的时候super(Teacher, self).__init__(name, gender, score,boosName, boosGender) 

         Student   __init__(self, name, gender, score)

         Boos      __init__(self, boosName, boosGender)

         父类接受参数的是后是按顺序接收的不能对应到我传的参数吧?

         结果 

         boosName --> name 

         boosGender  --> gender  

         

问题2: 这样递增的入参有没有好的写法呢?一个类里面有几十个参数的话是不是得每个参数都要传?



写回答 关注

1回答

  • weibo_丿褪色的回忆_0
    2024-05-30 15:48:07

    当Python子类继承父类时,通常不需要重新列出所有的参数,只需要在子类的初始化方法中调用父类的初始化方法即可。这样可以确保子类继承了父类的属性和方法。

    对于多重继承和祖先类的情况,子类需要在初始化方法中分别调用每个父类的初始化方法,以确保所有祖先类的属性和方法都被正确继承。在Python中,可以使用super()函数来实现这一点,它可以帮助子类调用父类的方法。

    以下是一个示例代码,展示了Python中子类继承父类以及多重继承时如何处理参数的情况:

    class Parent1:
        def __init__(self, param1):
            self.param1 = param1
    
    class Parent2:
        def __init__(self, param1, param2):
            self.param1 = param1
            self.param2 = param2
    
    class Child(Parent1, Parent2):
        def __init__(self, param1, param2, param3):
            super().__init__(param1)  # 调用第一个父类的初始化方法
            super(Parent1, self).__init__(param2)  # 调用第二个父类的初始化方法
            self.param3 = param3
    
    child_obj = Child('A', 'B', 'C')
    print(child_obj.param1)  # 输出:B
    print(child_obj.param2)  # 输出:B
    print(child_obj.param3)  # 输出:C


Python3 进阶教程(新版)

学习函数式、模块和面向对象编程,掌握Python高级程序设计

41910 学习 · 236 问题

查看课程

相似问题