前言:
与第一篇的面向对象内容不同的是,第一篇中的面向对象更多的是与类、对象结合起来的概念粗浅理解,就是在编程历史中诞生的一种思想方法。
这篇的面向对象编程,更多落实到在语言设计实现中,是如何体现面向对象这一设计思想的。
Content:
- 类和对象的多态
- - 多态和鸭子类型
1.什么是多态?
2.什么是鸭子类型?
3.动态python的多态和其他动态语言的区别? 和静态语言多态的区别?
4.python语言中鸭子类型的应用?
(
下篇内容:
- 类和对象的封装、继承
- - 抽象基类
- - 类属性,实例属性和其查找顺序
- - 静态方法、类方法、对象方法
- - 数据封装和私有属性
- - python的自省机制
- - python中的super函数
- - django中的继承
- - 上下文管理器
)
一 类的多态和鸭子类型
1.什么是多态?
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。
简单来说,就是有一个父类,很多子类继承了父类的方法但是对父类的方法进行了自己的定制(或者是在python中很多不同的类实现了同一个名字的方法),我生成这些子类的所有对象都有同一个方法,调用这些对象的相同方法但是有不同的结果。
多态的好处:
a.应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的 可复用性 。//继承
b.派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高 可扩充性 和 可维护性 。 //多态的真正作用
2.什么是鸭子类型?
即所有的类都实现了同一种方法,调用得时候可以同时调用这一种方法。在任何对象中,指定某一个方法名,所有类都可以通用,就为鸭子类型。 (是不是很像多态的概念?)
class Animals(): def say(self): print ( " say something " ) class Duck(Animals): def say(self): print ( " gaga " ) class Dog(Animals): def say(self): print ( " wangwang " ) class Miao(Animals): def say(self): print ( " miaomiao " )
class Cat(): def say(self): print ( " 喵 " ) class Dog(): def say(self): print ( " 汪 " ) class Duck(): def say(self): print ( " gaga " ) animals_list = [Cat,Dog,Duck] for i in animals_list: i().say()
4.鸭子类型在python语言设计中的实际应用?
例用list实现了的extend方法来看。
描述:extend() 函数用于在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)。
语法:extend()方法语法: list . extend ( seq )