python(27)- 面向对象练习Ⅰ
一:定义如下类,并最大程度地重用代码(继承,派生:子类重用父类方法,组合)
老师类
学生类
分数类
课程类
生日类
- class People:
- def __init__(self,name,age,birth):
- self.name = name
- self.age = age
- self.birth=birth
- class Teacher(People): #继承People
- def __init__(self,name,age,birth,course):
- People.__init__(self,name,age,birth) #子类重用父类方法
- self.course=course #派生
- class Student(People): #继承People
- def __init__(self,name,age,birth,course,score):
- People.__init__(self,name,age,birth) #子类重用父类方法
- self.course=course #派生
- self.score=score #派生
- class Course:
- def __init__(self,name,price,period):
- self.name=name
- self.price=price
- self.period=period
- class Score:
- def __init__(self,level):
- self.level=level
- class Birth:
- def __init__(self,year,mouth,day):
- self.year=year
- self.mouth=mouth
- self.day=day
- #类Teacher“调用”了类Birth的方法,达到了组合的效果
- #同样类Student“调用”了类Birth、类Course、类Score的方法,使用了组合的概念
- t1=Teacher("egon",68,Birth(1949,10,1),Course("python",15800,"6m"))
- s1=Student("xuyaping",18,Birth(1949,10,1),Course("python",15800,"6m"),Score("A"))
- print(s1.birth.year,s1.birth.mouth,s1.birth.day)
- print(t1.course.name,t1.course.price,t1.course.period)
- print(s1.score.level)
二:实现如图的继承关系,然后验证经典类与新式类在查找一个属性时的搜索顺序
- #python3中新式类
- class B:
- def test(self):
- print("from B")
- pass
- class C:
- def test(self):
- print("from C")
- pass
- class D(B,C):
- def test(self):
- print("from D")
- pass
- class E(B,C):
- def test(self):
- print("from E")
- pass
- class F(D,E):
- def test(self):
- print("from F")
- pass
- f=F()
- f.test()
- print(F.__mro__)
- --->(<class '__main__.F'>, <class '__main__.D'>, <class '__main__.E'>, <class '__main__.B'>, <class '__main__.C'>, <class 'object'>)
- #python2中
- #coding:utf8
- class B:
- def test(self):
- print("from B")
- pass
- class C:
- def test(self):
- print("from C")
- pass
- class D(B,C):
- def test(self):
- print("from D")
- pass
- class E(B,C):
- def test(self):
- print("from E")
- pass
- class F(D,E):
- def test(self):
- print("from F")
- pass
- f=F()
- f.test()
- #F--->D--->B--->C--->E
三:基于多态的概念来实现linux中一切皆文件的概念:文本文件,进程,磁盘都是文件,然后验证多态性
- 多态性:一种调用方式,不同的执行效果(多态性)
- class All_file:
- def write(self):
- pass
- def read(self):
- pass
- class Txt(All_file):
- def write(self):
- print("文本数据的写入")
- def read(self):
- print("文本数据的读取")
- class Process(All_file):
- def write(self):
- print("进程数据的写入")
- def read(self):
- print("进程数据的读取")
- class Sata(All_file):
- def write(self):
- print("磁盘数据的写入")
- def read(self):
- print("磁盘数据的读取")
- t=Txt()
- p=Process()
- s=Sata()
- def func(obj):
- obj.write()
- obj.read()
- func(t)
- --->文本数据的写入
- 文本数据的读取
- func(p)
- --->进程数据的写入
- 进程数据的读取
- func(s)
- --->磁盘数据的写入
- 磁盘数据的读取
python(27)- 面向对象练习Ⅰ的更多相关文章
- Python之面向对象一
引子 小游戏:人狗大战 角色:人和狗 角色属性:姓名,血量,战斗力和性别(种类) 技能:打/咬 用函数实现人打狗和狗咬人的情形 def Dog(name,blood,aggr,kind): dog = ...
- what's the python之面向对象
编程分为面向过程和面向对象,首先我们要了解什么是面向对象. 面向对象 面向过程就是我们之前学的内容,主要是函数式,其核心是过程,过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全 ...
- python初始面向对象
阅读目录 楔子 面向过程vs面向对象 初识面向对象 类的相关知识 对象的相关知识 对象之间的交互 类命名空间与对象.实例的命名空间 类的组合用法 初识面向对象小结 面向对象的三大特性 继承 多态 封装 ...
- python基础--面向对象基础(类与对象、对象之间的交互和组合、面向对象的命名空间、面向对象的三大特性等)
python基础--面向对象 (1)面向过程VS面向对象 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. ...
- python基础——面向对象编程
python基础——面向对象编程 面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想.OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的 ...
- Python的面向对象3
接下来,我们接着讲Python的面向对象,在上一次的博客中,我们详细介绍了类与对象的属性,今天,我们来详细介绍一下面向对象中的方法! 1.定义实例方法 一个实例的私有属性就是以__开头的属性,无法被外 ...
- Python的面向对象2
我们接着讲解Python的面向对象 1.初始化实例属性 在现实生活中,一种类型的实例会具有相同的某些属性,把这些实例划分为一个类型,则这些实例必然有相似的部分.但是,在创建实例之后,我们一个一个的为实 ...
- Python的面向对象1
今天,我们来介绍Python的面向对象编程,其实面向对象并不陌生,在C++ ,Java ,PHP中也有大量使用! 好了,我们来步入正题! 那什么是面向对象编程呢? 1. 面向对象编程是一种程序设计 ...
- My way to Python - Day05 - 面向对象-思维导图
My way to Python - Day05 - 面向对象 思维导图
- Python进阶---面向对象的程序设计思想
Python的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
随机推荐
- Game on Tree
D - Game on Tree Time limit : 2sec / Memory limit : 256MB Score : 1100 points Problem Statement Ther ...
- isinstance 和 type 的区别
class A: pass class B(A): pass isinstance(A(), A) # returns True type(A()) == A # returns True isins ...
- C++中使用Curl和JsonCpp调用有道翻译API实现在线翻译
使用C++开发一个在线翻译工具,这个想法在我大脑中过了好几遍了,所以就搜了下资料,得知网络上有很多翻译API,这里我选择我平时使用较多的有道翻译API进行在线翻译工具开发的练习.翻译API返回的结果常 ...
- NOIP2017整数 【线段树】
题目 题目背景 在人类智慧的山巅,有着一台字长为10485761048576 位(此数字与解题无关)的超级计算机,著名理论计算机科 学家P博士正用它进行各种研究.不幸的是,这天台风切断了电力系统,超级 ...
- SHUoj 字符串进制转换
字符串进制转换 发布时间: 2017年7月9日 18:17 最后更新: 2017年7月9日 21:17 时间限制: 1000ms 内存限制: 128M 描述 Claire Redfield ...
- Mysql多列索引实践
在网上看到: 定义:最左前缀原则指的的是在sql where 子句中一些条件或表达式中出现的列的顺序要保持和多索引的一致或以多列索引顺序出现,只要 出现非顺序出现.断层都无法利用到多列索引. 该博文有 ...
- 【NOIP2016】愤怒的小鸟(状压DP)
题意: Kiana最近沉迷于一款神奇的游戏无法自拔. 简单来说,这款游戏是在一个平面上进行的. 有一架弹弓位于(0,0)处,每次Kiana可以用它向第一象限发射一只红色的小鸟,小鸟们的飞行轨迹均为形如 ...
- 前端居中模板(常用HTML模板)
0.效果:
- .net EF框架
https://blog.csdn.net/u012235352/article/details/82768897 model first https://blog.csdn.net/u0101783 ...
- 关于Redux到底是个什么鬼
原文链接:https://zhuanlan.zhihu.com/p/20641377 我们故事的主人公,小明. 小明大学刚毕业,摆脱了宿舍的集体生活,自己在外面租了个一室一厅的小公寓住. 这是客厅的平 ...