python - self 调用父类方法

Python 子类继承父类构造函数说明 | 菜鸟教程如果在子类中需要父类的构造方法就需要显式地调用父类的构造方法,或者不重写父类的构造方法。 子类不重写 __init__,实例化子类时,会自动调用父类定义的 __init__。 实例 [mycode3 type='python'] class Father(object): def __init__(self, name): self.name=name print (..icon-default.png?t=O83Ahttps://www.runoob.com/w3cnote/python-extends-init.html

在学习了上述教程后,学到了子类调用父类的方法方式

使用 super 关键字:super(子类,self).__init__(参数1,参数2,....)
使用经典写法:父类名称.__init__(self,参数1,参数2,...)

但学习的时候,脑海里有一个奇怪的想法,self 不是也可以调用父类的方法吗 ?

先说一下自己的结论:

父类有A方法,子类重写A方法,不能通过self.A()方法调用父类A方法,需要通过教程中的方式

self

self 分析一下情况:

  1. 子类___init__() 调用 self.___init__() 
  2. 子类a() 调用 self.a() 
  3. 子类a() 调用 self.b()
情况 1: 子类___init__() 调用 self.___init__() 
class student(people):
    grade = ''

    def __init__(self, n, a, w, g):
        # 调用父类的构函
        self.__init__(self, n, a, w)
        self.grade = g

看了这个代码,不用运行就知道 self.___init__() 调不到父类的构造函数 ,所以不可行

情况 2:子类a() 调用 self.a() 

不用看代码 ,同情况 1

情况 3:子类a() 调用 self.b()
class Parent:

    def __init__(self, lastname):
        self.lastname = lastname

    def b(self):
        print('Parent b')

class Son(Parent):

    def __init__(self, lastname):
        super().__init__(lastname)

    def a(self):
        self.b()

Son("liu").a()

运行后没有问题

super()

super() 分析一下情况:

  1. 子类___init__() 调用 super().___init__() 
  2. 子类a() 调用 super().a() 
  3. 子类a() 调用 super().b()

情况 1: 子类___init__() 调用 super().___init__() 

这种情况就是菜鸟教程中的,没有问题

情况 2:子类a() 调用 self.a() 
class Parent:

    def a(self):
        print('Parent a')

class Son(Parent):

    def a(self):
        print('son a')
        super().a()

Son().a()

运行结果:

son a
Parent a

情况 3: 子类a() 调用 super().b()
 
class Parent:

    def b(self):
        print('Parent b')

class Son(Parent):

    def a(self):
        print('son a')
        super().b()

Son().a()

运行结果:

son a
Parent b

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值