类的继承

什么是继承

  • 继承是一种创建新类的方式,新建的类可以继承一个或多个父类(python支持多继承),父类可以称为基类或超类,新建的类称为派生类或子类
  • 继承的特性是:子类会遗传父类的属性
  • 继承是类与类之间的关系

为什么用继承

  • 子类会"遗传"父类的属性,从而使用继承可以减少代码冗余

对象的继承

  • python中支持继承一个或多个父类
class Parent1:
pass class Parent2:
pass class Son1(Parent1): # 单继承
pass class Son2(Parent1, Parent2): # 多继承
pass
  • 使用__bases__方法可以获取对象继承的类
print(Son2.__bases__)
print(Parent1.__bases__)
(<class '__main__.Parent1'>, <class '__main__.Parent2'>)
(<class 'object'>,)

新式类与经典类

  • 只有在python2中才分新式类和经典类,python3中统一都是新式类
  • 在python2中,声明继承object类的类,以及该类的子类,都是新式类;没有声明继承object类的类都是经典类
  • 在python3中,无论是否继承object,都默认继承object,即python3中所有类均为新式类

继承与抽象

继承描述的是子类与父类之间的关系,要找出这种关系,必须先抽象再继承,抽象即抽取类似或者说比较像的部分。

抽象分为两个层次:

1.将对象比较像的部分抽取成类
2.将类比较像的部分抽取成父类

继承:基于抽象的结果,通过编程语言去实现它,肯定是先经历抽象这个过程,才能通过继承的方式去表达出抽象的结构

继承的应用

  • 拿选课系统举例
class People:
def __init__(self, name, age, gender):
self.name = name
self.gender = gender
self.age = age class Student(People):
def choose_course(self):
print(f'{self.name} 选课') class Teacher(People):
def teach_course(self):
print(f'{self.name} 授课') stud = Student('tank', 18, 'male')
tea = Teacher('nick', 40, 'male') stud.choose_course()
tea.teach_course()
tank 选课
nick 授课

对象属性查找顺序

class People:
def __init__(self, name, age, gender):
self.name = name
self.gender = gender
self.age = age def choose_course(self):
print('from People') class Student(People):
def choose_course(self):
print('from Student') stud = Student('tank', 18, 'male')
stud.choose_course()
from Student
class People:
def __init__(self, name, age, gender):
self.name = name
self.gender = gender
self.age = age def choose_course(self):
print('from People') class Student(People):
pass stud = Student('tank', 18, 'male')
stud.choose_course()
from People

对象查找属性的顺序:对象自己--->对象的类--->父类--->父类。。。

最新文章

  1. select、poll、epoll之间的区别总结
  2. JavaScript中‘this’关键词的优雅解释
  3. ASP.NET Web API 配置返回的json字段的格式以及Action返回HttpResponseMessage类型和IHttpActionResult类型
  4. jquery,返回到顶部按钮
  5. hadoop1.2.1三种模式配置
  6. gulp 基础运用
  7. UVA 12103 - Leonardo&amp;#39;s Notebook(数论置换群)
  8. tornado 学习笔记
  9. 部署Tomcat服务时,解决Cannot invoke Tomcat Manager 异常
  10. Java基础:Java变量、数据类型、运算符(2)
  11. MVCC(Multi-version Cocurrent Control)多版本并发控制协议
  12. keepalived.conf配置说明
  13. python基础之Day14
  14. deque源码4(deque元素操作:pop_back、pop_front、clear、erase、insert)
  15. producer发布消息
  16. Python3从零开始爬取今日头条的新闻【四、模拟点击切换tab标签获取内容】
  17. C# 方法参数 out、ref、param 详解
  18. ios真机调试错误解决:Installation of apps is prohibited by a policy on the device
  19. excel中批量删除公式,保留数值
  20. 【转】JavaScript =&gt; TypeScript 入门

热门文章

  1. 网站访问分析对SEO的好处
  2. HTML DOM Table 对象
  3. Android Studio:Gradle project refresh failed. 解决方法
  4. 8-15 globalCompositeOperation阶段练习二
  5. 编程细节 —— 按值传递、按引用传递(final、const)
  6. &quot;Hello world&quot; of ML
  7. sql server使用维护计划定时备份完整数据库、差异数据库
  8. 在Ubuntu中设置DNS域名服务器
  9. MySQL-ProxySQL中间件(二)| Admin Schemas介绍
  10. Android 性能优化(2)性能工具之「Hierarchy Viewer 」Optimizing Your UI:分析哪个view有性能问题,查看屏幕上某像素点的坐标,颜色等