继承

先看个简单的例子了解一下继承。

class Animal: #父类

def __init__(self, name, age, department):

self.name=name

self.age=age

self.department=departmentdefrunning(self):print(‘%s可以奔跑!‘%self.name)class Cat(Animal): #括号里放要继承的父类

def __init__(self, name, age, department, tail):

Animal.__init__(self, name, age, department) #即想使用父类的属性又有自己独有的属性,就在内部调用父类的__init__

self.tail = tail #派生属性

classMouse(Animal):def __init__(self, name, age, department, tail):

super().__init__(name, age, department)#super方法只在python3中有 相当于Animal.__init__(self, name, age, department)

self.tail =tailclassHuman(Animal):def __init__(self, name, age, department):

Animal.__init__(self, name, age, department)def create(self): #派生方法

print(‘%s可以创造!‘%self.name)

cat= Cat(‘Tom‘, 10, ‘猫科‘, ‘蓝色尾巴‘)

mouse= Mouse(‘Jerry‘, 7, ‘鼠科‘, ‘灰色尾巴‘)

human= Human(‘zzy‘, 24, ‘人科‘)print(cat.name) #Tom

print(mouse.tail) #灰色尾巴

cat.running() #Tom可以奔跑!

human.create() #zzy可以创造!

print(Human.mro()) #[, , ]查看继承顺序

print(Human.__bases__) #查看继承的所有父类

继承

通过上面的例子总结一下继承的特性:

"""继承:子类是父类的关系 作用:可以减少代码的重复

通过 类名(父类名) 来进行继承,

一个类可以单继承也可以多继承

一个类可以被单个类继承,也可以被多个类继承

父类中没有而子类中有的属性为 派生属性

父类中没有而子类中有的方法为 派生方法

单继承:

对象调用时,先在子类里找,子类里有一定用子类里的,没有再去父类里面找

多继承:

在新式类中(python3中都是新式类),对象调用查找是按广度查找

新式类,默认继承object

在经典类中,对象调用查找是深度查找

经典类,python2.7创建的默认类,继承object后变为新式类"""

研究一下继承的查找顺序:这里以python3为例

classD:deffunc(self):print(‘d‘)classC(D):deffunc(self):print(‘c‘)classB(D):deffunc(self):print(‘b‘)classA(B, C):deffunc(self):print(‘a‘)

a=A()

a.func()#a A类里有就找A类

#注释掉A类里的func

a.func() #b A类里没有,先从括号中最左边的B类里找

#注释掉B类里的func

a.func() #c B类里没有,判断通过C类也能找到B的父类D,会从C类先找

#注释掉C类里的func

a.func() #d C类里没有,就找父类D

上面的继承顺序可以看出:

"""广度查找:原则就是在没找到时,按继承层级找完每一个父类

深度查找:原则是一条继承线路找到底才会找另外的线路"""

再看下super方法的本质:

classA(object):deffunc(self):print(‘A‘)classB(A):deffunc(self):

super().func()print(‘B‘)classC(A):deffunc(self):

super().func()print(‘C‘)classD(B, C):deffunc(self):

super().func()print(‘D‘)

b=D()

b.func()#打印顺序为 A C B D#super的本质 :不是单纯找父类 而是根据调用者的节点位置的广度优先顺序来的

封装

封装 用于对代码的保护,使类中的隐藏属性和方法只有通过提供的公共访问方式来使用,而不能直接查。

下面写个例子具体看下:

classPerson:__keys = ‘量子编码规则‘ #私有静态属性

def __init__(self, name, password):

self.name=name

self.__password = password #__属性 定义私有属性

def __get_password(self): #__方法 定义私有方法

return self.__password #只能在内部访问

def login(self, name, passwd): #提供公共访问方法

if name == self.name and passwd == self.__get_password():print(‘登陆成功‘)

person= Person(‘zzy‘, ‘zzy123‘)#print(person.__password) # 报错 显示Person类找不到__password#print(person._Person__password) # zzy123 在外部通过 _类名__属性名 也能查看私用属性,但是不能这样用!

person.login(‘zzy‘, ‘zzy123‘) #登陆成功

那子类能否继承父类的私有属性呢?

classFoo:__key = 123

classSon(Foo):print(Foo.__key) #报错 子类不能继承父类的私用属性

多态

"""多态:指一类事物有多种形态,python天生支持多态。

python中推崇鸭子类型,即看起来用起来都很像,但却没有任何约束关系,是一种自我约束行为。比如list和tuple

优点:松耦合,相似类之间不会有任何影响

缺点:自我约束,随意性太强"""

例子

classHoly:defcure(self, HP):

HP+= 100

return ‘血量为%s‘%HPclassDiscipline:defcure(self, HP):

HP+= 100

return ‘血量为%s‘%HPdef cure(obj, HP): #在强数据类型语言中,obj必须要指定数据类型,在Python中就可以是多种形态的

returnobj.cure(HP)#这里的Discipline类和Holy类就很相似,就可以当同一个事物去使用

holy =Holy()

discipline=Discipline()print(cure(holy, 20))print(cure(discipline, 10))

python面向对象三大基本特性_python面向对象之三大特性相关推荐

  1. python面向对象编程的三大特性_Python面向对象总结及类与正则表达式详解

    Python3 面向对象 -------------------------------------------------------------------------------- 一丶面向对象 ...

  2. python面相对象编程指南_Python面向对象编程指南

    抽象是隐藏多余细节的艺术.在面向对象的概念中,抽象的直接表现形式通常为类.虽然Python是解释性语言,但是它是面向对象的,从设计之初就已经是一门面向对象的语言.Python基本上提供了面向对象编程语 ...

  3. python面向对象三大特性_Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...

  4. python对象三个特性_python面向对象的三大特性

    一.继承 面向对象中的继承就是继承的类直接拥有被继承类的属性而不需要在自己的类体中重新再写一遍,其中被继承的类叫做父类.基类,继承的类叫做派生类.子类.在python3中如果不指定继承哪个类,默认就会 ...

  5. python对象三个特性_Python面向对象三大特征之多

    一.什么是多态: 多态可以增加代码的灵活度 以 继承 和 重写父类方法为前提 是调用方法的技巧,不会影响到类的内部设计 不同的子类对象调用相同的父类方法,产生不同的执行结果 class Dog(obj ...

  6. python面向对象大段代码_python面向对象部分简单整理

    面向对象 VS 面向过程 面向过程 面向过程的程序设计的核心是过程(流水线式思维) 优点: 极大的降低了写程序的复杂度 缺点: 一整个过程(流水线)只能解决一个问题,若问题更改,代码几乎要全部重写. ...

  7. python中的多态用法_Python面向对象之多态原理与用法案例分析

    本文实例讲述了Python面向对象之多态原理与用法.分享给大家供大家参考,具体如下: 目标 多态 面向对象三大特性 封装 根据 职责 将 属性 和 方法 封装 到一个抽象的 类 中 定义类的准则 继承 ...

  8. python中对象的特性_python面对对象-三大特性

    python面向对象的三大特性:继承,封装,多态. 1. 封装: 把很多数据封装到一个对象中. 把固定功能的代码封装到一个代码块, 函数, 对象, 打包成模块. 这都属于封装的思想. 具体的情况具体分 ...

  9. python面向对象编程138讲_Python面向对象编程简单讲解

    学习目标: 1-面向对象编程 2-类和对象 3-对象的属性和方法 4-类的特性 Python面向对象编程 一种编程程序的设计思想,把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数.把计算机 ...

最新文章

  1. 什么叫大地高_等电位箱有什么用?
  2. 读书笔记 《Perl语言入门》 Day 1
  3. 各种边缘检测算法效果对比-差分运算法、Sobel、Scharr、Laplace(拉普拉斯)、Roberts、Canny
  4. 消息摘要算法示例(python和go)
  5. PHP线程安全和非线程安全的区别
  6. 【论文解读】CVPR 2021 当之无愧的最佳论文奖:GIRAFFE,一种可控图像合成方法...
  7. linux中service的问题
  8. Visual Studio 2019 16.1发布,更快更高效
  9. vue使用js-cookie写入获取不到_Vue 面向对象 - 实战 - 内容管理系统(五)
  10. ASP.Net防止页面刷新重复提交
  11. 团伙 并查集_BZOJ 1370 Baltic2003 Gang团伙 并查集
  12. 概率中的独立和不相关
  13. 感性负载,容性负载,阻性负载
  14. 2020秋 英文科技论文写作与学术报告-期末
  15. Mac spotlight无法搜索的解决方法
  16. 关于Bmob的一些浅述
  17. Python之Pickle学习
  18. Win7: Logoff被用户Lock的屏幕
  19. 四级网络工程师——计算机网络笔记
  20. 服务器(2080Ti)配置pytorch,distiller开发环境踩坑记录

热门文章

  1. react结合redux的开发步骤
  2. 基于Vue-cli和Vux的webpack配置
  3. js Date 对象用于处理日期和时间。
  4. 基于UML的面向对象分析与设计
  5. ibm mq并发访问队列_消息队列之九问九答
  6. mysql空事务死锁_mysql空当锁导致死锁_mysql
  7. linux内核关闭tcp校验,linux内核tcp调优规范与方案
  8. android客户端注入及清除cookie,Android客户端注入及清除Cookie
  9. tensorflow2 神经网络模型构建4种方法
  10. Ubuntu 20中在LXD容器内安装ROS