news 2026/6/14 14:42:25

Python面向对象——进阶(三)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python面向对象——进阶(三)

一,继承

1,定义:通俗语言的将继承就是儿子继承父亲的。在面向对象里面。就是子类继承父类的属性和方法。

2,基本语法(私有属性和私有方法除外)

#定义父类 class A(object):#这个其实可以理解为也是一种继承。object基础类简称“基类” pass #定义子类 #在这里面子类B继承父类A class B(A): pass

案例:人类——>学生和老师

#定义父类 class Person(object):#这个其实可以理解为也是一种继承。object基础类简称“基类” def eat(self): print("我是人类,我要吃饭") def drink(self): print("我是人类,我要喝水") #创建学生子类 class student(Person): #占位符。没有任何功能。但可以保证程序正常运行 pass #创建教室类 class teacher(Person): # 占位符。没有任何功能。但可以保证程序正常运行 pass #类的实例化(创建对象)实例化学生类 s1 = student() #调用父类中的方法 s1.eat() s1.drink() #类的实例化(创建对象)实例化教师类 t1 = teacher() #调用父类的方法 #调用父类中的方法 t1.eat() t1.drink()

3,关于继承的几个基本概念

继承:一个类从另一个已有的类获得其成员的相关特性,就叫作继承!

派生:从一个已有的类产生一个新的类,称为派生!

很显然,继承和派生其实就是从不同的方向来描述的相同的概念而已,本质上是一样的!

父类:也叫作基类,就是指已有被继承的类!

子类:也叫作派生类或扩展类

扩展:在子类中增加一些自己特有的特性,就叫作扩展,没有扩展,继承也就没有意义了!

单继承:一个类只能继承一个父类,不能继承多个父类,单继承也是大多数面向对象语言的特性!

多继承:一个类同时继承了多个父类,

4,单继承

1>单继承:

#定义父类 #单继承 class Person(object): pass #创建学生子类 class student(Person): pass

2>多层继承:

#定义父类 class A(object): pass #B类继承A类 class B(A): pass #C类又继承B类 class C(B): pass

4,多继承:就是一个类可以继承多个父母类

#定义父类A class A(object): pass #定义父类B class B(object): pass #C类又继承A,B类 class C(A,B): pass

案例:

#定义父类A class A(object): def a(self): print('这是A类中的方法') #定义父类B class B(object): def b(self): print('这是B类中的方法') #C类又继承A,B类 class C(A,B): pass #todo 实例化对象。在这里实例化的是c c1 = C() #调用父类A中的方法,c继承A的方法 c1.a() #调用父类B中的方法。c继承B的方法 c1.b()

5.重写
定义:重写就是覆盖,子类继承父类的方法和属性。是当子类成员与父类成员名字相同的时候,从父类继承下来的成员会重新定义!

#创建父类 class Father(object): #属性 #方法 pass class son(object): #继承出父类的属性和方法 #自己的属性和方法 #todo 但是自己的属性和方法与父类的属性和方法名字一致时。这就是重写 pass

案例:

#以动物类示范 #1,首先,创建父类 class Anima(object): #创建父类的方法 def cell(self): print("动物都回发出声音") def eat(self): print("动物都需要吃东西") #2,创建猫的子类 class cat(Anima): #重写父类的方法。与父类的方法名字一样 def cell(self): print("哈吉米南北绿豆") #创建马的子类 class horse(Anima): # 重写父类的方法。与父类的方法名字一样 def cell(self): print("曼波!") #3创建对象 c1 = cat() h1 = horse() #4调用方法 c1.eat() c1.cell() h1.eat() h1.cell()

问题:如果子类重写了父类的方法,那么父类的方法还存在吗?

答:存在。因为:类调用的方法的顺序是从子类中寻找,以我的cat类举例子。我cat类中存在cell方法。所以会优先访问子类中cell。当我调用cat类的eat()方法时,在子类中没有找到。在调用父类中的eat()方法。

6,super()调用父类的属性和方法

作用:调用父类的属性和方法

完整写法:super().属性或super().方法名()

举例:

#以动物类示范 #1,首先,创建cat类 class cat(object): def __init__(self,color,name,age): self.color = color self.name = name self.age = age def active(self): print("哈吉米都会抓老鼠") #2,创建白猫的子类 class white_cat(cat): #重写父类的方法。与父类的方法名字一样 def active(self): print(f"我是一只名字叫{self.name}猫,我的颜色是{self.color},我今年{self.age}岁了") #创建黑猫的子类 class black_cat(cat): #给添加自己的属性同时继承父类的属性 def __init__(self, color, name, age,weight): super().__init__(color, name, age)#=self.color = color # self.name = name # self.age = age #体重属性。属于黑猫的自己属性 self.weight =weight def active(self): print(f"我是一只名字叫{self.name}猫,我的颜色是{self.color},我今年{self.age}岁了,我的体重是{self.weight}") #3创建对象 bm = white_cat("白色","白猫","5") hm = black_cat("黑色","黑猫","8","11") #4调用方法 bm.active() hm.active()

7,MRO属性和MRO方法

我们可以通过类名.__mro__类名.mro()获得“类的层次结构”,方法解析顺序也是按照这个“类的层次结构”寻找到。

#以动物类示范 #1,首先,创建cat类 class cat(object): def __init__(self,color,name,age): self.color = color self.name = name self.age = age def active(self): print("哈吉米都会抓老鼠") #2,创建白猫的子类 class white_cat(cat): #重写父类的方法。与父类的方法名字一样 def active(self): print(f"我是一只名字叫{self.name}猫,我的颜色是{self.color},我今年{self.age}岁了") #创建黑猫的子类 class black_cat(cat): #给添加自己的属性同时继承父类的属性 def __init__(self, color, name, age,weight): super().__init__(color, name, age)#=self.color = color # self.name = name # self.age = age #体重属性。属于黑猫的自己属性 self.weight =weight def active(self): print(f"我是一只名字叫{self.name}猫,我的颜色是{self.color},我今年{self.age}岁了,我的体重是{self.weight}") print(white_cat.__mro__) print(black_cat.mro())

今天没有作业哦。但本章节的代码都要自己手动敲写一遍哦!!!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 11:39:42

深入探讨:Gremlin查询中的边界问题

引言 在图数据库中,Gremlin是一种强大的查询语言,允许用户以一种直观的方式遍历和操作图结构。然而,复杂的查询逻辑有时会导致意想不到的错误。本文将通过一个实际案例深入探讨Gremlin查询中的边界问题,并提供解决方案。 背景 假设我们有一个图数据库,其中包含了大量的…

作者头像 李华
网站建设 2026/6/12 17:04:29

Unity游戏开发中的视角问题解决方案

在Unity游戏开发中,视角问题常常会让开发者头疼。尤其是当你在编辑器中测试一切正常,但在最终构建的游戏中却出现视角偏移的情况时,问题就变得更加棘手。今天,我们将通过一个实际案例来探讨如何解决这类问题,并提供一些实用的解决方案。 问题描述 假设你正在开发一个类似…

作者头像 李华
网站建设 2026/6/12 4:42:18

8 个文献综述工具推荐,本科生AI写作助手解析

8 个文献综述工具推荐,本科生AI写作助手解析 论文路上的“三座大山”:任务繁重、时间紧迫与重复率高 对于大多数本科生来说,撰写一篇高质量的文献综述不仅是学术训练的一部分,更是对综合能力的一次全面考验。然而,在实…

作者头像 李华
网站建设 2026/6/13 14:44:56

OpenGL 绘制文本(纹理缓冲)

文章目录 一、简介 二、实现代码 三、实现效果 参考资料 一、简介 这里通过创建纹理的缓冲区来实现文本的绘制,主要的步骤如下所述: 1. 使用一个轻量级的库stb(它类似于freetype,只不过更为轻便)读取字体的字形,它涉及到字体的高度、宽度、字间距等等信息。 2.使用OpenGL…

作者头像 李华
网站建设 2026/6/13 12:17:42

天塔之光:组态王6.55与西门子1200 PLC联机程序实践与博途15应用解析

天塔之光组态王6.55和西门子1200PLC联机程序3ok,博途15组态王和西门子PLC的联机调试在工业自动化里算是经典组合了。这次用天塔之光组态王6.55对接S7-1200,博途V15的环境配置,实测下来最头疼的还是通信协议的匹配。先上硬货——直接看PLC数据…

作者头像 李华