面向对象 super方法

1. super的简介

作用:super方法用来继承父类

  super方法,会根据传入super函数当中的 本类以及当前所在的对象,来找到本类的父类,然后将对象(self)传给父类中,同时将属性传给父类;由此,达到继承父类的效果

常用语法:

# 方法1
Role.__init__(self,name,age)              # 最原始继承父类属性的方法
# 方法2
super(当前所在的类, 当前所在的对象).__init__(属性名)    # super写法1:完整写法,将本类名和self传入super,并传name参数到父类到init方法中
# 方法3
super().__init__(属性名)                # super写法2:简单写法,默认传本类名和self

注意:super在python3里面比较好用,在python2里比较难用

2. 单继承中的super

单继承中,super的作用就是找父类

class Role:
    def __init__(self,name,age):
        self.name = name
        self.age = age


class Student(Role):
    pass

class Worker(Role):
    def __init__(self,name,age,job):
        self.job = job
        # Role.__init__(self,name,age)              # 最原始继承父类属性的方法
        # super(Worker, self).__init__(name,age)    # super写法1:完整写法,将本类名和self传入super,并传name参数到父类到init方法中
        super().__init__(name,age)                  # super写法2:简单写法,默认传本类名和self

jack = Worker('jack',22,'teacher')
print(jack.name,jack.age,jack.job)    # jack 22 teacher

3. 多继承中的super

多继承中,super的作用是按照mro的顺序找下一个类
见下例:

class A():
    def func(self):
        print('A')

class B(A):
    def func(self):
        super().func()
        print('B')

class C(A):
    def func(self):
        super().func()
        print('C')

class D(B,C):
    def func(self):
        super().func()
        print('D')

print(D.mro())  # [<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
obj = D()
obj.func()  # A C B D

  按类的继承来说,obj.func()的输出本应为 A B D 才对,但是,实际输出为 A C B D;原因是,在多继承当中,super的作用是按照mro的顺序去找下一个类,而不是单继承中的单纯找父类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值