python面向对象之继承/多态/封装
老师说,按继承/多态/封装这个顺序来讲。
子类使用父类的方法:
#!/usr/bin/env python
# coding:utf-8 class Vehicle:
def __init__(self,name,speed,load,power):
self.name = name
self.speed = speed
self.load = load
self.power = power def run(self):
print("开动啦。") class Benz(Vehicle):
def __init__(self,name,speed,load,power,color):
# Vehicle.__init__(self,name,speed,load,power) # 使用指定类名方式调用了父类方法
# super(__class__.self).__init__(name,speed,load,power) # 使用super(__class__.self)方式
super().__init__(name,speed,load,power) # 采用super()不传参数的方法
self.color=color def show_info(self):
print(self.name,self.speed,self.load,self.power,self.color) def run(self):
# Vehicle.run(self) # 使用指定类名称的方式,调用了父类方法
super().run()
print("%s %s 出发啦." % (self.color,self.name)) car1 = Benz("GLK 300","","5人","2.4T","black")
car1.show_info()
car1.run()
继承的例子:
#!/usr/bin/env python
# coding:utf-8 '''
组合与继承都是有效地利用已有类的资源的重要方式。但是二者的概念和使用场景皆不同, 1.继承的方式 通过继承建立了派生类与基类之间的关系,它是一种'是'的关系,比如白马是马,人是动物。 当类之间有很多相同的功能,提取这些共同的功能做成基类,用继承比较好,比如老师是人,学生是人 2.组合的方式 用组合的方式建立了类与组合的类之间的关系,它是一种‘有’的关系,比如教授有生日,教授教python和linux课程,教授有学生s1、s2、s3... 当类之间有显著不同,并且较小的类是较大的类所需要的组件时,用组合比较好
''' class Dad:
'这个是爸爸类'
money=10
def __init__(self,name):
print('父类')
self.name=name
def hit_son(self):
print('%s 正在打儿子' %self.name) # class Son(Dad):
# pass
#
# # print(Son.money)
# # Son.hit_son() # 继承了父类的数据属性和函数属性
# s1=Son('alex')
# s1.hit_son()
# print(s1.name)
# print(Dad.__dict__)
# print(Son.__dict__) class Son(Dad):
money = 1000000009
def __init__(self,name,age):
self.name=name
self.age=age def hit_son(self):
print('来自子类') s1 = Son('Jerry',12)
print(s1.money)
print(Dad.money) # 子类在自己里面定义了与父类同名的属性,并没有覆盖父类的属性
s1.hit_son() print(s1.__dict__)
继承顺序:
#!/usr/bin/env python
# coding:utf-8 ## 继承的顺序 class A:
def test(self):
print("A") class B(A): # 单继承
# def test(self):
# print("B")
pass class C(A):
def test(self):
print("C")
pass class D(B):
# def test(self):
# print("D")
pass class E(C):
# def test(self):
# print("E")
pass class F(D,E): # 多继承
# def test(self):
# print("F")
pass f1 = F()
f1.test()
# 新式类查找顺序 F >> D >> B >> E >> C >> A
# 经典类查找顺序 F >> D >> B >> A >> E >> C print(F.__mro__) # python2中经典类没有 __mro__ ## 如果继承关系为菱形结构,那么属性的查找方式有两种,分别是:深度优先和广度优先
## 经典类时,要查找的属性不存在时,多继承会按照深度优先的方式查找
## 新式类时,要查找的属性不存在时,多继承会按照广度优先的方式查找,最后找到object
多态的例子:
#!/usr/bin/env python
# coding:utf-8 ## 多态
## python本身就是多态的.
# 由不同的类实例化得到的对象,调用同一个方法,执行的逻辑不同
# 指出了对象如何通过他们共同的属性和动作来操作及访问,而不需要考虑它们具体的类。
# 表明了动态绑定的存在,允许重载及运行时类型确定和验证。
# 体现在调用不同对象的共同方法时,才能展现出来。 class H2O:
def __init__(self,name,temperature):
self.name=name
self.temperature=temperature
def turn_ice(self):
if self.temperature < 0:
print('[%s]温度太低结冰了' %self.name)
elif self.temperature > 0 and self.temperature < 100:
print('[%s]液化成水' %self.name)
elif self.temperature > 100:
print('[%s]温度太高变成了水蒸气' %self.name) class Water(H2O):
pass
class Ice(H2O):
pass
class Steam(H2O):
pass w1=Water('水',25)
i1=Ice('冰',-20)
s1=Steam('蒸汽',3000) # 下面三个对象调用了相同的方法,但是得到的结果却不一样。
w1.turn_ice()
i1.turn_ice()
s1.turn_ice()
python面向对象之继承/多态/封装的更多相关文章
- Python 面向对象编程 继承 和多态
Python 面向对象编程 继承 和多态 一:多继承性 对于java我们熟悉的是一个类只能继承一个父类:但是对于C++ 一个子类可以有多个父亲,同样对于 Python一个类也可以有多个父亲 格式: c ...
- Python面向对象三要素-多态
Python面向对象3要素-多态 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.多态概述 OCP原则:多用“继承”,少修改. 继承的用途:在子类上实现对基类的增强,实现多态. ...
- Python面向对象03 /继承
Python面向对象03 /继承 目录 Python面向对象03 /继承 1. 初识继承 2. 单继承 3. 多继承 4. 总结 1. 初识继承 概念:专业角度:如果B类继承A类,B类就称为子类,派生 ...
- Python面向对象编程——继承与派生
Python面向对象编程--继承与派生 一.初始继承 1.什么是继承 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题. 继承是一种创 ...
- python oop常用术语 继承 多态 封装
面向对象优点 1.通过封装明确了内外 2.通过继承+多态在语言层面支持了归一化设计 抽象/实现 抽象指对现实世界问题和实体的本质表现,行为和特征建模,建立一个相关的子集,可以用于 绘程序结构,从而实现 ...
- 继承 & 多态 & 封装
什么是继承 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 python中类的继承分为:单继承和多继承 class Par ...
- python面向对象的继承-组合-02
*面向对象(OOP)的三大特征:**# 封装.继承.多态 继承 什么是继承 继承:# 是一种关系,描述两个对象之间什么是什么的什么的关系 例如:麦兜.佩奇.猪猪侠.猪刚鬣,都是猪 为什么要使用继承 继 ...
- python面向对象编程 继承 组合 接口和抽象类
1.类是用来描述某一类的事物,类的对象就是这一类事物中的一个个体.是事物就要有属性,属性分为 1:数据属性:就是变量 2:函数属性:就是函数,在面向对象里通常称为方法 注意:类和对象均用点来访问自己的 ...
- python 面向对象之继承与派生
一:初识继承 1,什么是继承? 继承指的是类与类之间的关系,是一种什么"是"什么的关系,继承的功能之一就是用来解决代码重用问题 继承是一种创建新类的方式,在python中,新建的类 ...
随机推荐
- HDU 5299 Circles Game
HDU 5299 思路: 圆扫描线+树上删边博弈 圆扫描线有以下四种情况,用set维护扫描线与圆的交点,重载小于号 代码: #pragma GCC optimize(2) #pragma GCC op ...
- PCA和PCoA
讲解很详细:http://blog.genesino.com/2016/10/PCA/ PCA分析一般流程: 中心化(centering, 均值中心化,或者中位数中心化),定标(scale,如果数据没 ...
- 文献导读 | Single-Cell Sequencing of iPSC-Dopamine Neurons Reconstructs Disease Progression and Identifies HDAC4 as a Regulator of Parkinson Cell Phenotypes
文献编号:19Mar - 11 2019年04月23日三读,会其精髓: 相信这种方法的话,那么它的精髓是什么,如何整合出这个core gene set. 首先要考虑样本的选择,样本里是否存在明显的分层 ...
- 关于p-Laplace的想法
最近的想法 关于p-Laplace的想法 对于一类p-laplace方程的问题的想法. 现在摆在面前的是首先我要考虑的问题是$W^{1,p}$估计对于凸区域上的p-laplace是否成立,或者更广.. ...
- CF923E Perpetual Subtraction
生成函数好题! 搬一手铃悬的题解(侵删) 现在只需要考虑怎么求出g和逆变换即可,其实也就是对函数F(x)求F(x+1)和F(x-1). 直接二项式定理展开发现是个卷积的形式,大力NTT即可. #inc ...
- pip使用国内源
对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间.而且经常出现下载后安装出错问题.所以把PIP安装源替换成国内镜像,可以大幅提升下载速度,还可以提高安装成 ...
- python标准库总的random函数用法
Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等.random中的一些重要函数的用法:1 ).random() 返回0& ...
- 【二分查找】 跳石头NOIP2015提高组 D2T1
[二分查找]跳石头NOIP2015提高组 D2T1 >>>>题目 [题目描述] 一年一度的“跳石头”比赛又要开始了! 这项比赛将在一条笔直的河道中进行,河道中分布着一些巨大岩石 ...
- Js 框架之Vue .JS学习记录 ① 与Vue 初识
目录 与 Vue.js 认识 VUE.JS是个啥?有啥好处? Vue 的目标 战前准备 VUE.JS环境 VUE.JS 尝试一下,你就明白 第一步 实例化VUE 对象 第二步VueAPP 调用数据 ...
- MySQL数据库(1)
你好,我是Sundy左左,一名初级数据分析师,我在建设一个属于初学者笔记的乐园,在这里我将自己学习的东西分享出来,也许对你有用也许对你没用,但都欢迎您指出我的错误和改进的地方.我是一个初级的数据分析师 ...