当前位置: 首页 > news >正文

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())

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

http://www.jsqmd.com/news/102137/

相关文章:

  • CosyVoice3 - 跨语言、会方言、懂情绪的智能配音工具 文本转语音 语音克隆 支持50系显卡 一键整合包下载
  • 四季梅豆角矮砧密植:水肥一体化系统的铺设要点
  • 【LLM基础教程】从序列切分到上下文窗口02_三种数据切分方法
  • 9 个高效降AI率工具,自考人必备!
  • 【LLM基础教程】LLM训练数据集是如何构造的:从文档到Token Block
  • 8 个降AI率工具推荐,本科生高效避坑指南
  • 打表小技巧
  • 10个降AI率工具,专科生高效避坑指南
  • 8 个降AI率工具,自考学生高效避坑指南
  • SQL中的NULL值处理技巧
  • AI绘画商业化落地:图像生成应用的7个盈利模式
  • LobeChat与知识库系统联动:构建智能问答闭环
  • LobeChat会议议程自动生成器开发
  • LobeChat新品发布新闻稿撰写
  • LobeChat认证授权体系设计
  • LobeChat版本更新日志解读:v0.8.5新增特性一览
  • LobeChat能否挑战商业AI产品?我们做了全面评估
  • LobeChat CI/CD自动化部署流水线搭建实例
  • LobeChat产品研发优先级建议
  • LobeChat能否实现批量生成文案?营销场景高效应用
  • LobeChat功能亮点宣传文案
  • LobeChat估值预测:下一个独角兽AI基础设施?
  • LobeChat正式版发布新闻稿
  • LobeChat SEO标题生成器实战应用
  • LobeChat满意度评分引导话术
  • Ansible安装与入门
  • 8 个 AI 写作工具,MBA 论文轻松搞定!
  • Ansible进行Nginx编译安装的详细步骤
  • 9个AI论文工具,继续教育学员轻松写毕业论文!
  • 9个AI写作工具,专科生论文写作不求人!