Python面向对象类继承和组合实例分析


Posted in Python onMay 28, 2018

本文实例讲述了Python面向对象类继承和组合。分享给大家供大家参考,具体如下:

在python3中所有类默认继承object,凡是继承了object的类都成为新式类,以及该子类的子类Python3中所有的类都是新式类,没有集成object类的子类成为经典类(在Python2中没有集成object的类以及它的子类都是经典类

继承式用来创建新的类的一种方式,好处是减少重复代码

class People:
  def __init__(self,name,age):
    self.name=name
    self.age=age
  def walking(self):
    print('%s is walking ' %self.name)
  def talking(self):
    print('%s is talking '%self.name)
class Teacher(People):
  pass
class Student(People):
  pass
t1=Teacher('egon',18)
print(t1.name,t1.age)
t1.walking()
t1.talking()
s1=Student('xiaobai',22)
print(s1.name,s1.age)
s1.talking()
s1.walking()

执行结果

egon 18
egon is walking
egon is talking
xiaobai 22
xiaobai is talking
xiaobai is walking

class People:
  def __init__(self,name,age,sex):
    self.name=name
    self.age=age
    self.sex=sex
  def walking(self):
    print('%s is walking ' %self.name)
  def talking(self):
    print('%s is talking '%self.name)
class Teacher(People):
  def __init__(self,name,age,sex,level,salary):
    People.__init__(name,age,sex)
    self.level=level
    self.salary=salary
  def teaching(self):
    People.talking(self)
    print('%s is teaching'%self.name)
class Student(People):
  def __init__(self,name,age,sex,group):
    People.__init__(name,age,sex)
    self.group=group
  def studying(self):
    People.talking(self)
    print('%s is studying'%self.name)

组合

class Date:
  def __init__(self,year,mon,day):
    self.year=year
    self.mon=mon
    self.day=day
  def tell_birth(self):
    print('出生于<%s>年 <%s>月 <%s>日'%(self.year,self.mon,self.day))
class Teacher:
  def __init__(self,name,age,sex,year,month,day):
    self.name=name
    self.age=age
    self.sex=sex
    self.birth=Date(year,month,day)
  def teaching(self):
    print('%s is teaching'%self.name)
class Student:
  def __init__(self,name,age,sex,year,mon,day):
    self.name=name
    self.age=age
    self.sex=sex
    self.birth=Date(year,mon,day)
  def studying(self):
    print('%s is studying'%self.name)
xiaobai=Student('xiaobai',22,'male','1995','3','16')
xiaobai.birth.tell_birth()

执行结果

出生于<1995>年 <3>月 <16>日

继承和组合

class People:
  def __init__(self,name,age,sex,year,mon,day):
    self.name=name
    self.age=age
    self.sex=sex
    self.birth=Date(year,mon,day)
  def walking(self):
    print('%s is walking ' %self.name)
  def talking(self):
    print('%s is talking '%self.name)
class Date:
  def __init__(self,year,mon,day):
    self.year=year
    self.mon=mon
    self.day=day
  def tell_birth(self):
    print('出生于<%s>年 <%s>月 <%s>日'%(self.year,self.mon,self.day))
class Teacher(People):
  def __init__(self,name,age,sex,level,salary,year,mon,day):
    People.__init__(self,name,age,sex,year,mon,day)
    self.level=level
    self.salary=salary
  def teaching(self):
    People.talking(self)
    print('%s is teaching'%self.name)
class Student(People):
  def __init__(self,name,age,sex,year,mon,day,group):
    People.__init__(self,name,age,sex,year,mon,day)
    self.group=group
  def studying(self):
    People.talking(self)
    print('%s is studying'%self.name)

父类要限制

1、子类必须有父类的方法

2、子类实现的方法必须跟父类的方法的名字一样

import abc
class File(metaclass=abc.ABCMeta):
  @abc.abstractclassmethod
  def read(self):
    pass
  @abc.abstractclassmethod
  def write(self):
    pass

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python实现二分查找算法实例
May 26 Python
Python自然语言处理之词干,词形与最大匹配算法代码详解
Nov 16 Python
Python有序查找算法之二分法实例分析
Dec 11 Python
python生成不重复随机数和对list乱序的解决方法
Apr 09 Python
python写入已存在的excel数据实例
May 03 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
Django 项目重命名的实现步骤解析
Aug 14 Python
python3实现用turtle模块画一棵随机樱花树
Nov 21 Python
Python实现图片识别加翻译功能
Dec 26 Python
python3 使用traceback定位异常实例
Mar 09 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
Jun 01 Python
如何使用 Python 读取文件和照片的创建日期
Sep 05 Python
django传值给模板, 再用JS接收并进行操作的实例
May 28 #Python
Django处理文件上传File Uploads的实例
May 28 #Python
python3.4实现邮件发送功能
May 28 #Python
解决Django的request.POST获取不到内容的问题
May 28 #Python
Django后台获取前端post上传的文件方法
May 28 #Python
基于Django URL传参 FORM表单传数据 get post的用法实例
May 28 #Python
浅析Python装饰器以及装饰器模式
May 28 #Python
You might like
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
linux下安装php的memcached客户端
2014/08/03 PHP
php实现微信发红包
2015/12/05 PHP
PHP内核探索之变量
2015/12/22 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
JavaScript面向对象之体会[总结]
2008/11/13 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
2则自己编写的jQuery特效分享
2015/02/26 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
2015/08/24 Javascript
JavaScript数组实现数据结构中的队列与堆栈
2016/05/26 Javascript
js eval函数使用,js对象和字符串互转实例
2017/03/06 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
jquery获取并修改触发事件的DOM元素示例【基于target 属性】
2019/10/10 jQuery
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS OG
2018/03/30 DOTA
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
python实现探测socket和web服务示例
2014/03/28 Python
Python深入06——python的内存管理详解
2016/12/07 Python
Python随机生成均匀分布在三角形内或者任意多边形内的点
2017/12/14 Python
Python tkinter label 更新方法
2018/10/11 Python
Python3.6简单的操作Mysql数据库的三个实例
2018/10/17 Python
浅谈Pandas:Series和DataFrame间的算术元素
2018/12/22 Python
Flask框架模板渲染操作简单示例
2019/07/31 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
2019/08/08 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
Python PyQt5模块实现窗口GUI界面代码实例
2020/05/12 Python
瑰珀翠美国官网:Crabtree & Evelyn美国
2016/11/29 全球购物
澳大利亚在线购买儿童玩具:Toy Universe
2017/12/28 全球购物
Ajax的工作原理
2015/12/04 面试题
Apache Hudi集成Spark SQL操作hide表
2022/03/31 Servers
vue实现列表垂直无缝滚动
2022/04/08 Vue.js
大脑的记忆过程在做数据压缩,不同图形也有共同的记忆格式
2022/04/29 数码科技