python 中一切皆对象。

先说 说面向对象语言三大特性:封装、继承、多态。

1、封装分两个层面
第一层面:创建类和对象时,分别创建两人者的名称空间,只能通过类名加"."或者obj.的方式访问里面的属性方法;

第二层面:类中可以把某些属性或方法隐藏起来,或者定义为私有,只在类内部使用,在类的外面无法访问,或者只留下少量的接口(函数)供外部访问。

2、继承
python中可以多继承,其继承顺序使用了C3算法,可以通过 类.__ mro__ 来查看

mro: method resolution order (方法解释顺序)

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class A(object):def say(self):print('AA say')class B(object):def say(self):print('BB say')class C(A):def say(self):print('CC say')class D(B):def say(self):print('DD say')class E(D, C):def say(self):print('EE say')d = E()
print(E.__mro__)
d.say()

输出如下:

(<class '__main__.E'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
EE say

这里只是展示怎么查看多继承的查找顺序,关于继承的复杂结构还有很多,这里就不一一列了,结构不一样,继承的顺序也不一样,有的广度优先有的深度优先,自己试吧。

继承的顺序算法比较复杂,强烈不推荐使用这种多继承的方式,要不然会很混乱。推荐使用Mixin的多继承方式,即所继承的每个类中只实现了同一种方法,不存在多方覆盖的问题。不过若是真的设计成了多继承的复杂结构,调试代码时还是尽量使用mro来查看一下到底执行了哪个父类中的属性方法。

3、多态

python不支持多态,或者说python本来就是多态语言。

鸭子类型:

Duck typing 这个概念来源于美国印第安纳州的诗人詹姆斯·惠特科姆·莱利(James Whitcomb Riley,1849-
1916)的诗句:”When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.”
上代码,来源于网上很经典的案例:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class Duck():def walk(self):print("I walk like a duck")def swim(self):print('I swim like a duck')class Person():def walk(self):print("I walk like a duck")def swim(self):print('I swim like a duck')

可以看出Pseron类拥有和Duck类一样的方法,当程序调用Duck类,并利用了其中的walk和swim方法时,我们传入Person类也一样可以运行,程序并不会检查类型是不是Duck,只要他拥有 walk()和swim()方法,就能被正确地调用。

举例:

一个对象实现了__ getitem__魔法方法,那python解释器就会把它当做一个callection,你就可以对这个对象进行切片、获取子项等; 如果一个对象实现了__ iter__和next方法,python就会把它当成一个iterator, 你就可以对这个对象通过循环获取各个子项; 如果一个对象中实现了__ len__方法,你就可以对这个对象执行len()对它进行计数。

结论:

面向对象是很强大的,在python编程之初我们要强制自己不要什么都用函数来实现,要多写类,即使是很小的功能实现也用类来做,养成习惯,久了以后关于类和对象的相关知识自然接触的就多,也能写出更加复杂的程序。

python 鸭子类型及三大特性相关推荐

  1. python 鸭子类型_Python中的鸭子输入是什么?

    python 鸭子类型 Python遵循EAFP(比许可更容易请求宽恕)而不是LBYL(跨越式). EAFP的Python哲学在某种程度上与其"鸭子打字"编码风格有关. 当程序员在 ...

  2. python鸭子类型

    python鸭子类型 python不支持多态,也不用支持多态,而是一种多态的语言. 鸭子类型(duck typing):是动态类型的一种风格,不是由继承特定的类或实现特定的接口,而是当前的方法和属性的 ...

  3. python鸭子类型_Python的鸭子类型

    '那只东西呱呱的叫,有扁扁的嘴巴,走起路来还外八,对!它就是只鸭子'基本定义 对于熟悉python的开发者来说,相信对于python的鸭子类型比较熟悉,所谓鸭子类型,在维基百科中的准确定义是'是动态类 ...

  4. Python面向对象之:三大特性:继承,封装,多态以及类的约束

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

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

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

  6. python鸭子类型_关于鸭子类型

    其实对我来说鸭子类型一直是一个比较模糊的概念,因为平常不去关注,关注的时候一般是在面试或者被面试的时候,今天在看一篇博客的时候又有看到,所以就索性弄清楚 ``` 首先 与duck typing相对应的 ...

  7. python鸭子类型_你知道什么是Python里的鸭子类型和猴子补丁吗?

    有时候我们会听到Python里所谓的鸭子类型和猴子补丁的说法,乍一听还以为是来到了动物园,Python这只大蟒蛇还可以和鸭子和猴子一起玩耍? 非也非也,鸭子类型和猴子补丁实际上是两个生动有趣的比喻,用 ...

  8. Python OOP:面向对象三大特性(封装、继承、多态)、类属性和实例属性、类方法@classmethod、静态方法@staticmethod、函数和类callable、__call__

    一.面向对象三大特性 二.多态 定义:多态是⼀种使⽤对象的⽅式,⼦类重写⽗类⽅法,调⽤不同⼦类对象的相同⽗类⽅法,可以产⽣不同的执⾏结果. 一个父类,可以继承给多个子类,每个不同的子类可以创建多个对象 ...

  9. python鸭子类型与协议理解

    鸭子类型 定义 在维基百科中的准确定义是'是动态类型的一种风格.在这种风格中,一个对象有效的语义,不是由继承自特定的类或实现特定的接口,而是由"当前方法和属性的集合"决定' 个人理 ...

最新文章

  1. grep如何忽略.svn目录,以及如何忽略多个目录
  2. linux查看cpu 内存
  3. mysql 连接 选库 查询
  4. pyspark模块介绍
  5. mysql strtolower_GitHub - redfoxli/mysqlstr: a php extension provide string processing of mysql
  6. word List 41
  7. 鼠绘漫画 for wp8.1
  8. 8个数据清洗Python代码,复制可用,最长11行 | 资源
  9. Ruby设计模式透析之 —— 组合(Composite)
  10. 第二季-专题15-快车道DMA
  11. Android的硬件缩放技术优化执行效率 Screen.SetResolution
  12. Java数据结构:双向链表Double Linked List基础笔记
  13. t14m4t:一款功能强大的自动化暴力破解工具
  14. 软件开发报价的计算方法
  15. Win7安装虚拟光驱蓝屏解决办法
  16. 订单业务中如何保证接口的幂等性
  17. 数据迁移方案-云迁移
  18. Excel 录制宏 - 制作工资条
  19. php swoole 视频直播_swoole如何实现直播
  20. 计算机应该更新,电脑更新要多久

热门文章

  1. 【LeetCode】LRU Cache 解决报告
  2. Java http方式提交短信到短信网关
  3. salt的远程部署java-1.6.0-openjdk
  4. Linux 系统 vsftpd时区问题的解决
  5. vue 后台翻译_vue translate peoject实现在线翻译功能【新手必看】
  6. SAP最佳业务实践:重复制造(149)-4发料
  7. Smartform中负号提前解决方法
  8. Winsock Error Codes
  9. win7 系统盘下AppData文件夹中Local和Roaming分别有什么作用?
  10. SAP中的记忆功能没有了,怎么办?