python中class类的继承 多继承及super()

  • python中class的继承
class Person(object):
    number = 61

    def __init__(self):
        self.name = '小明'
        self.age = 18
        self.gender = '男'

    def func(self):
        pass


class Student(Person):
    def eat(self):
        print('chi')

stu1 = Student()
print(stu1.name, stu1.func(), stu1.age, stu1.eat(), stu1.gender, stu1.number)

如上所示,Student类继承了Person类,并获得了Person的所有字段,属性,及方法
对于定义的每一个类,Python会计算出解析顺序(mro)列表
class.mro可以查看

  • 多继承
    如果一个类继承多个父类的情况下,会合并所有父类的mro并遵从下列原则:
  1. 子类会先于父类被检查
  2. 多个父类会根据它们在列表中的顺序被检查
  3. 如果对下一个类存在两个合法的选择,选择第一个父类
  • 子类属性,方法基于父类的重写及 super()的使用
    如果子类某些在父类属性基础上扩充则需要重新定义init()
    经典的菱形继承
    20190115210205895.png

    注意:
    子类的对象属性不能超过其各个父类属性个数的最大值,如果不同父类有不同的属性定义, 子类需要全部继承时,需要使用*arges, **kwarges 不定长参数 使父类的属性个数不定长,此时子类继承时能获得所有的属性
class Father(object):

    def __init__(self, name, *arges, **kwargs):
        self.name = name
        super().__init__(*arges, **kwargs)


class Motner(object):

    def __init__(self, age, *arges, **kwargs):
        self.age = age
        super().__init__(*arges, **kwargs)


class Student(Father, Motner):
    def __init__(self, name, age):
        super().__init__(name, age)

print(Student.__mro__)
stu1 = Student('asd', 18)
print(stu1.age)
print(stu1.name)
#结果
(, , , )
18
asd

你可能感兴趣的:(python中class类的继承 多继承及super())