python基础之组合继承多态
2024-08-28 17:17:51
组合
1.什么是组合
组合就是一个类的对象具备一个指向另外一个类的对象的属性
2.为何用组合
组合可以减少代码冗余
3.如何使用
class People:
def __init__(self,name,age,sex):
self.name=name
self.age=age
self.sex=sex
class Course:
def __init__(self,name,period,price):
self.name=name
self.period=period
self.price=price
def tell_info(self):
print('<%s %s %s>' %(self.name,self.period,self.price))
class Teacher(People):
def __init__(self,name,age,sex,job_title):
People.__init__(self,name,age,sex)
self.job_title=job_title
self.course=[]
self.students=[]
class Student(People):
def __init__(self,name,age,sex):
People.__init__(self,name,age,sex)
self.course=[]
egon=Teacher('egon',18,'male','沙河霸道金牌讲师')
s1=Student('牛榴弹',18,'female') python=Course('python','3mons',3000.0)
linux=Course('python','3mons',3000.0) #为老师egon和学生s1添加课程
egon.course.append(python)
egon.course.append(linux)
s1.course.append(python)
#为老师egon添加学生s1
egon.students.append(s1) #使用
for obj in egon.course:
obj.tell_info()
菱形继承问题 非菱形继承都是深度优先
1.什么是菱形继承问题?
一个子类继承多个父类,最终继承同一个类
2.python2中分经典类和新式类
经典类按深度优先查找属性
新式类按广度优先查找属性
注意:按照发起查找的类为准,父类中既有新式类,又有经典类与查找的方式无关
在子类派生出的新功能中,重用父类功能的方式有两种
1.指名道姓地访问(与继承无关)
2.严格依赖继承属性的查找关系
super()会得到一个特殊的对象,该对象就是专门用来访问父类中的属性的(按照继承关系)
super()__init__(name,age,) 不需要传self,已经自动传入
注意:在python2中需要写完整super(自己的类名,self)__init__(name,age,)
super()谁查找就会以谁的mro()为准,碰到super()会按当前的位置继续往后找
多态与多态性
1.什么是多态与多态性?
多态指的是同一种事物的各种形态
如水可以有固态,液态,气态
多态性:继承同一个类的多个子类中有相同的方法名,那么子类产生的对象都能不考虑具体的类型而直接调用父类的功能
抽象类
import abc #利用abc模块实现抽象类
class All_file(metaclass=abc.ABCMeta): # 用于限制子类的定义
all_type='file'
@abc.abstractmethod #定义抽象方法,无需实现功能
def read(self):
'子类必须定义读功能'
Pass
python中不推荐使用抽象类,python推荐使用鸭子类型。
最新文章
- Java底层实现 - CPU术语
- 基本类型和引用类型调用是的区别(Object.create)
- 【仿真】【modelsim】:verilog功能仿真流程
- 2 Orchard汉化资源包的使用
- ASP.Net网站程序在编译发布部署后的后期修改
- 夺命雷公狗---微信开发56----微信js-sdk接口开发(3)所有接口功能
- 在 WPF 程序中使用 MVVM 模式
- 1到n数组,和为指定数所有序列问题
- linux ssh 无密码登陆
- JavaScript学习笔记——简单无缝循环滚动展示图片的实现
- Scope Directive
- MySQL 5.5 禁用 innodb
- Java课程设计 购物车系统(个人博客)
- MySQL索引 - 索引的类型
- gogs详细配置
- 通信(二):进程间通信之socket
- 客户端缓存机制 - Cookie详解
- Django获取数据库数据时根据id筛选
- 【SpringMVC学习07】SpringMVC中的统一异常处理
- 什么是mvc?