文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python-继承

2023-10-27 20:18

关注

面向对象三大特性

1.单继承

1.1继承的概念、语法和特点

继承的概念:子类拥有父类的所有方法属性

1.1.1继承的语法

class 类名(父类名):    pass

1.1.2专业术语

Dog类是Animal类的子类,Animal类是Dog类的父类,Dog类从Animal类继承

Dog类是Animal类的派生类,Animal类是Dog类的基类,Dog类从Animal类派生

1.1.3继承的传递性

子类拥有父类以及父类的父类中封装的所有属性方法

class Animal:    def eat(self):        print("吃---")    def drink(self):        print("喝---")    def run(self):        print("跑---")    def sleep(self):        print("睡---")class Dog(Animal):    def bark(self):        print("汪汪叫")class XiaoTianQuan(Dog):    def fly(self):        print("我会飞")# 创建一个哮天犬xtq = XiaoTianQuan()xtq.fly()xtq.bark()xtq.eat()

提问

哮天犬能够调用Cat类中定义的catch方法吗?

答案

不能,因为哮天犬Cat之间没有继承关系

1.2方法的重写

应用场景

注意:哮天犬与普通狗的叫法不一样

重写 父类方法有两种情况:

1.2.1覆盖子类的方法

具体的实现方式,就相当于在子类中定义了一个和父类同名的方法并且实现重写之后,在运行时,只会调用子类中重写的方法,而不再会调用父类封装的方法。

class Animal:    def eat(self):        print("吃---")    def drink(self):        print("喝---")    def run(self):        print("跑---")    def sleep(self):        print("睡---")class Dog(Animal):    def bark(self):        print("汪汪叫")class XiaoTianQuan(Dog):    def fly(self):        print("我会飞")    def bark(self):        print("叫得跟神一样...")xtq = XiaoTianQuan()# 如果子类中,重写了父类的方法# 在使用子类对象调用方法时,会调用子类中重写的方法xtq.bark()

1.2.2对父类方法进行扩展

关于super

class Animal:    def eat(self):        print("吃---")    def drink(self):        print("喝---")    def run(self):        print("跑---")    def sleep(self):        print("睡---")class Dog(Animal):    def bark(self):        print("汪汪叫")class XiaoTianQuan(Dog):    def fly(self):        print("我会飞")    def bark(self):        # 1.针对子类特有的需求,编写代码        print("神一样的叫...")        # 2.使用super().调用原本在父类中封装的方法        super().bark()        # 3. 增加其他子类的代码        print("$%#&")xtq = XiaoTianQuan()# 如果子类中,重写了父类的方法# 在使用子类对象调用方法时,会调用子类中重写的方法xtq.bark()

1.3父类的私有属性和私有方法

子类对象不能在自己的方法内部,直接访问父类的私有属性私有方法

子类对象可以通过父类公有方法间接访问到私有属性私有方法

示例

2.多继承

概念

语法

class 子类名(父类名1, 父类名2...)    pass
class A:    def test(self):        print("test 方法")class B:    def demo(self):        print("demo 方法")class C(A, B):    # 多继承可以让子类对象,同时具有多个父类的属性和方法     pass# 创建子类对象c = C()c.test()c.demo()

2.1多继承的使用注意事项

问题的提出

提示:开发时应该尽量避免这种容易产生混淆的情况!--如果父类之间存在同名的属性或者方法,应该尽量避免使用多继承

python中的MRO--方法搜索顺序

class A:    def test(self):        print("A --- test 方法")    def demo(self):        print("A --- demo 方法")class B:    def test(self):        print("B --- test 方法")    def demo(self):        print("B --- demo 方法")class C(B, A):    # 多继承可以让子类对象,同时具有多个父类的属性和方法     pass# 创建子类对象c = C()c.test()c.demo()# 确定C类对象调用方法的顺序print(C.__mro__)

输出结果

(, , , )

2.2新式类与旧式(经典)类

objectpython为所有对象提供的基类,提供有一些内置的属性和方法,可以使用dir函数查看

新式类和经典类在多继承时--会影响到方法的搜索顺序

为了保证编写的代码能够同时python2.x和python3.x运行!

今后在定义类时,如果没有父类,建议统一继承自object

class 类名(object):    pass

代码见:https://github.com/x45w/python_jicheng.git

内容总结于:https://space.bilibili.com/37974444

来源地址:https://blog.csdn.net/aaaccc444/article/details/128748970

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯