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 yield使用方法示例
Dec 04 Python
理解生产者消费者模型及在Python编程中的运用实例
Jun 26 Python
Python基础知识_浅谈用户交互
May 31 Python
Python实现购物程序思路及代码
Jul 24 Python
Python实现利用最大公约数求三个正整数的最小公倍数示例
Sep 30 Python
python脚本实现验证码识别
Jun 07 Python
浅谈Python中eval的强大与危害
Mar 13 Python
浅谈keras保存模型中的save()和save_weights()区别
May 21 Python
Python字典实现伪切片功能
Oct 28 Python
Python基本知识点总结
Apr 07 Python
浅析Python OpenCV三种滤镜效果
Apr 11 Python
使用Python开发冰球小游戏
Apr 30 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文件中是否含有bom的函数
2012/05/31 PHP
如何使用php判断服务器是否是HTTPS连接
2013/07/05 PHP
PHP+Apache环境中如何隐藏Apache版本
2017/11/24 PHP
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
用html5 js实现点击一个按钮达到浏览器全屏效果
2014/05/28 Javascript
面向切面编程(AOP)的理解
2015/05/01 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
轻松实现js图片预览功能
2016/01/18 Javascript
JavaScript html5 canvas画布中删除一个块区域的方法
2016/01/26 Javascript
关于cookie的初识和运用(js和jq)
2016/04/07 Javascript
Javascript中引用类型传递的知识点小结
2017/03/06 Javascript
微信小程序滚动Tab实现左右可滑动切换
2017/08/17 Javascript
详解vue-cli与webpack结合如何处理静态资源
2017/09/19 Javascript
JS实现碰撞检测的方法分析
2018/01/19 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
nuxt配置通过指定IP和端口访问的实现
2020/01/08 Javascript
JavaScript编写开发动态时钟
2020/07/29 Javascript
[02:40]2014DOTA2 国际邀请赛中国区预选赛 四大豪门抵达华西村
2014/05/23 DOTA
Python字符串拼接六种方法介绍
2017/12/18 Python
python实现多张图片拼接成大图
2019/01/15 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
python requests使用socks5的例子
2019/07/25 Python
pandas DataFrame行或列的删除方法的实现示例
2019/08/02 Python
Python 70行代码实现简单算式计算器解析
2019/08/30 Python
10行Python代码计算汽车数量的实现方法
2019/10/23 Python
python3 logging日志封装实例
2020/04/08 Python
Pycharm中安装wordcloud等库失败问题及终端通过pip安装的Python库如何添加到Pycharm解释器中(推荐)
2020/05/10 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
Silk’n激光脱毛器官网:silkn.com
2016/10/06 全球购物
八一建军节部队活动方案
2014/02/04 职场文书
自我鉴定书
2014/03/24 职场文书
酒店管理求职信范文
2014/04/06 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
vue router 动态路由清除方式
2022/05/25 Vue.js