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字典序问题实例
Sep 26 Python
Python命令行参数解析模块optparse使用实例
Apr 13 Python
简单讲解Python中的字符串与字符串的输入输出
Mar 13 Python
Python的Django应用程序解决AJAX跨域访问问题的方法
May 31 Python
基于python 字符编码的理解
Sep 02 Python
python2 与python3的print区别小结
Jan 16 Python
python环形单链表的约瑟夫问题详解
Sep 27 Python
python3 selenium自动化 frame表单嵌套的切换方法
Aug 23 Python
Pytoch之torchvision.transforms图像变换实例
Dec 30 Python
python matplotlib imshow热图坐标替换/映射实例
Mar 14 Python
Python之多进程与多线程的使用
Feb 23 Python
Python与C++中梯度方向直方图的实现
Mar 17 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
php while循环得到循环次数
2013/10/26 PHP
CI(CodeIgniter)框架配置
2014/06/10 PHP
CodeIgniter配置之database.php用法实例分析
2016/01/20 PHP
php数值转换时间及时间转换数值用法示例
2017/05/18 PHP
斜45度寻路实现函数
2009/08/20 Javascript
IE6下focus与blur错乱的解决方案
2011/07/31 Javascript
jQuery中hasClass()方法用法实例
2015/01/06 Javascript
JQuery实现的图文自动轮播效果插件
2015/06/19 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
不得不看之JavaScript构造函数及new运算符
2017/08/21 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
javascript sort()对数组中的元素进行排序详解
2019/10/13 Javascript
es6 super关键字的理解与应用实例分析
2020/02/15 Javascript
[01:16:13]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第一场 2月22日
2021/03/11 DOTA
python追加元素到列表的方法
2015/07/28 Python
python执行使用shell命令方法分享
2017/11/08 Python
linecache模块加载和缓存文件内容详解
2018/01/11 Python
对Python中for复合语句的使用示例讲解
2018/11/01 Python
Python 正则表达式 re.match/re.search/re.sub的使用解析
2019/07/22 Python
将python依赖包打包成window下可执行文件bat方式
2019/12/26 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
python__new__内置静态方法使用解析
2020/01/07 Python
python3注册全局热键的实现
2020/03/22 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
CSS3 简单又实用的5个属性
2010/03/04 HTML / CSS
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
飞利信loadrunner和软件测试笔试题
2012/09/22 面试题
大专毕业生求职信
2014/07/05 职场文书
长城英文导游词
2015/01/30 职场文书
海上钢琴师的观后感
2015/06/11 职场文书
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js
Java面试题冲刺第十五天--设计模式
2021/08/07 面试题