子类调用父类同名方法和属性

1、全量代码 

class Master:
    def __init__(self):
        self.kongfu = '[古法煎饼果子配方]'
        print(f'Master_self:{self}')

    def make_cake(self):
        print(f'运用{self.kongfu}制作煎饼果子')

class School():
    def __init__(self):
        self.kongfu = '[学校煎饼果子配方]'
        print(f'School_self:{self}')
    def make_cake(self):
        print(f'运用{self.kongfu}制作煎饼果子')

class Prentice(School,Master):
    def __init__(self):
        self.kongfu = '[独创煎饼果子配方]'

    def make_cake(self):
        #如果是先调用了父类的属性和方法,则父类属性和方法会覆盖子类属性和方法,故在调用属性前,先调用自己子类的初始化
        self.__init__() #加自己的初始化的原因:如果不加这个自己的初始化,kongfu属性值是上一次调用的init内的kongfu属性值
        print(f'运用{self.kongfu}制作煎饼果子')
    
    #调用父类方法,但是为了保证调用到的也是父类的属性,必须在调用方法前调用父类的初始化
    def make_master_cake(self):
        #再次调用初始化的原因:这里想要调用父类的同名方法和属性,属性在init初始化位置,所以需要再次调用init
        Master.__init__(self)  #接收将来调用的对象
        Master.make_cake(self)

    def make_school_cake(self):
        School.__init__(self)
        School.make_cake(self)

daqiu = Prentice()
daqiu.make_cake()
print(f'-------------------------------------------------')
daqiu.make_master_cake()
print(f'daqiu={daqiu}')
print(f'-------------------------------------------------')
daqiu.make_school_cake()
print(f'-------------------------------------------------')
daqiu.make_cake()

 

 2、为什么自己调用init

    def make_cake(self):
        #如果是先调用了父类的属性和方法,则父类属性和方法会覆盖子类属性和方法,故在调用属性前,先调用自己子类的初始化
        self.__init__()
        print(f'运用{self.kongfu}制作煎饼果子')



daqiu = Prentice()
daqiu.make_cake()
print(f'-------------------------------------------------')
daqiu.make_master_cake()
print(f'daqiu={daqiu}')
print(f'-------------------------------------------------')
daqiu.make_school_cake()
print(f'-------------------------------------------------')
daqiu.make_cake()

否则出现调用自己make_cake方法,他的初始化属性还是学校的

运用[独创煎饼果子配方]制作煎饼果子

-------------------------------------------------

Master_self:<__main__.Prentice object at 0x0000000003B497F0>

运用[古法煎饼果子配方]制作煎饼果子

daqiu=<__main__.Prentice object at 0x0000000003B497F0>

-------------------------------------------------

School_self:<__main__.Prentice object at 0x0000000003B497F0>

运用[学校煎饼果子配方]制作煎饼果子

-------------------------------------------------

运用[学校煎饼果子配方]制作煎饼果子

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三日沐水

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值