【Lemon】python的继承

目录

类的继承

多继承

重写父类方法

调用被重写的父类方法

super()的应用场景


类的继承

子类通过继承父类,能够获取父类中定义的所有属性和方法(私有属性除外)。

注意:父类不能使用子类的属性和方法。

 

继承的作用:简化代码,提高代码的重用性。

 

示例:

未用到继承之前的代码:

class PhoneV1(object):

    def call(self):

        print('打电话的功能')



class PhoneV2(object):

    def call(self):

        print('打电话的功能')



    def listen_music(self):

        print('听音乐的功能')



    def send_message(self):

        print('发短信的功能')



class PhoneV3(object):

    def call(self):

        print('打电话的功能')



    def listen_music(self):

        print('听音乐的功能')



    def send_message(self):

        print('发短信的功能')



    def we_chat(self):

        print('聊微信的功能')



    def plag_game(self):

        print('玩游戏的功能')

 

用到继承之后的代码:

class PhoneV1(object):

    def call(self):

        print('打电话的功能')



class PhoneV2(PhoneV1):

    def listen_music(self):

        print('听音乐的功能')



    def send_message(self):

        print('发短信的功能')



class PhoneV3(PhoneV2):

    def we_chat(self):

        print('聊微信的功能')



    def play_game(self):

        print('玩游戏的功能')



# v1对应的类

print('------v1对应的类------')

v1 = PhoneV1()

v1.call()

# 父类不能调用子类的方法

# v1.listen_music() # 报错:AttributeError: 'PhoneV1' object has no attribute 'listen_music'



# v2对应的类

print('------v2对应的类------')

v2 = PhoneV2()

# 子类可以调用父类的方法

v2.call()

v2.listen_music()

v2.send_message()



# v3对应的类

print('------v3对应的类------')

v3 = PhoneV3()

v3.call()

v3.listen_music()

v3.send_message()

v3.we_chat()

v3.play_game()

 

多继承

子类可以继承多个父类,子类都可以用到继承的父类中的属性和方法。

示例:

class BaseA(object):

    attr_a = 100

    def func_a(self):

        print('func_a----------aaa')



class BaseB(object):

    attr_b = 900

    def func_b(self):

        print('func_b----------bbb')



class MyTest(BaseA, BaseB):

    pass



m = MyTest()

print(m.attr_a)

print(m.attr_b)



m.func_a()

m.func_b()

 

注意:

如果子类继承的父类里面都有相同的方法,在调用的时候,会先找第一个父类的方法,找到了就不会继续找了,没找到就会继续找下一个父类的方法。

如果子类自己也有跟父类相同的方法,在调用的时候,子类会优先使用自己的方法,不会去找父类的方法了。

示例:

class BaseA(object):

    attr_a = 100

    def func_a(self):

        print('func_a----------aaa')



    def func(self):

        print('func_ab----------ab')



class BaseB(object):

    attr_b = 900

    def func_b(self):

        print('func_b----------bbb')



    def func(self):

        print('func_bb----------bb')



class MyTest(BaseA, BaseB):

    pass

    # def func(self):

    #     print('func_cb----------cb')



m = MyTest()

m.func()

 

重写父类方法

在子类中定义跟父类同名的方法就是重写父类方法。

示例:

class PhoneV1(object):

    def call(self):

        print('打电话的功能')



class PhoneV2(PhoneV1):

    def listen_music(self):

        print('听音乐的功能')



    def send_message(self):

        print('发短信的功能')

    # 重写父类的方法

    def call(self):

        print('打视频电话的功能')



class PhoneV3(PhoneV2):

    def we_chat(self):

        print('聊微信的功能')



    def play_game(self):

        print('玩游戏的功能')



print('------v1对应的类------')

v1 = PhoneV1()

v1.call()   # 输出结果:打电话的功能



print('------v2对应的类------')

v2 = PhoneV2()

# 子类可以调用父类的方法

v2.call() # 输出结果:打视频电话的功能



print('------v3对应的类------')

v3 = PhoneV3()

v3.call()   # 输出结果:打视频电话的功能

 

调用被重写的父类方法

方式一:父类名.方法名(self)

方式二:super().方法名

示例:

class PhoneV1(object):

    def call(self):

        print('打电话的功能')



class PhoneV2(PhoneV1):

    def we_chat(self):

        print('聊微信的功能')



    def play_game(self):

        print('玩游戏的功能')

    # 重写父类的方法

    def call(self):

        print('打视频电话的功能')

        print('**********接下来想打语音电话')

        # 调用父类里面的call()

        # 方式一:父类名.方法名(self)

        PhoneV1.call(self)

        # 方式二:super().方法名

        super().call()



v2 = PhoneV2()

v2.call()

 

 

super()的应用场景

主要是代码的扩展,扩展新功能。

示例:

class MyClass:

    def __init__(self, a, b):

        self.a = a

        self.b = b



    def number(self):

        print('a+b=', self.a + self.b)





class MyClassV2(MyClass):

    def number(self):

        # 调用父类原有的方法

        super().number()

        # 在原有方法的基础上扩展新功能

        print('a+b=', self.a / self.b)





m = MyClassV2(11, 22)

m.number()
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值