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的面向对象 一.面向过程与面向对象的对比 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优 ...
随机推荐
- sqlserver数据库的权限设置
1.先用Windows账户登陆,然后在安全性中添加用户--SQL server 身份验证,用户名,密码2.用户映射--勾选对应的数据库--数据库角色成员身份--db_owner public
- ruby操作mysql
require "win32ole" require 'pathname' require 'mysql2' excel = WIN32OLE.new('excel.applica ...
- Welcome-to-Swift-17自判断链接(Optional Chaining)
自判断链接(Optional Chaining)是一种可以请求和调用属性.方法及子脚本的过程,它的自判断性体现于请求或调用的目标当前可能为空(nil).如果自判断的目标有值,那么调用就会成功:相反,如 ...
- 【bzoj3676】[Apio2014]回文串 回文自动机
题目描述 考虑一个只包含小写拉丁字母的字符串s.我们定义s的一个子串t的“出现值”为t在s中的出现次数乘以t的长度.请你求出s的所有回文子串中的最大出现值. 输入 输入只有一行,为一个只包含小写字母( ...
- ubuntu服务器与本地文件传输
ubuntu SSH 连接.远程上传下载文件 博客分类: Ubuntu 安装 SSH(Secure Shell) 服务以提供远程管理服务 sudo apt-get install ssh SSH ...
- Git的使用小结
1. git是一种分布式版本控制工具.目前项目中比较常见的版本控制器有SVN.CVS等,这些版本控制工具属于集中式版本控制器.集中式版本控制器,有一个中央服务器,开发人员的开发机从主服务器上下载了项目 ...
- AC自动机详解 (P3808 模板)
AC自动机笔记 0.0 前言 哇,好久之前就看了 KMP 和 Trie 树,但是似乎一直没看懂 AC自动机?? 今天灵光一闪,加上之前看到一些博客和视频,瞬间秒懂啊... 其实这个玩意还是蛮好理解的. ...
- java面试题之哨兵如何判断主服务器是否下线?
通过流言协议来接收关于主服务器是否下线的信息,并使用投票协议来决定是否执行自动故障迁移,以及选择哪个从服务器作为新的主服务器.
- Java面试题之线程与进程的区别
进程是操作系统分配资源的最小单元: 线程是操作系统调度的最小单元: 一个程序至少有一个进程:一个进程至少有一个线程 每个进程对应一个JVM实例,多个线程共享JVM里的堆: 线程不能看做独立应用,而进程 ...
- poj Pseudoprime numbers 3641
Pseudoprime numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 10903 Accepted: 4 ...