Python面向对象之多态
2019-05-06 20:37
288 查看
多态
面向对象三大特性
封装 根据职责将属性和方法封装到一个抽象的类中;--定义类的准则
继承 实现代码的重用,相同的代码不需要重复的编写;--设计类的技巧;子类针对自己的需求,编写特定的代码;
多态 不同的子类对象调用相同的父类方法,产生不同的执行结果;--
- 多态可以增加代码的灵活度;
- 以继承和重写父类方法为前提;
- 是调用方法的技巧,不会影响到类的内部设计;
例如同样是人类,就有医生和教师的工作职别。
多态案例演练
需求:在Dog类中封装方法game,普通狗类只是简单的玩耍;
定义军犬类继承自Dog,重写game方法,军犬可以接飞盘;
定义Person类,并且封装一个和狗玩的方法,在方法内部,直接让狗对象调用game方法。
class Dog(object): def __init__(self, name): self.name = name def game(self): print("%s 跳来跳去" % self.name) class ArmyDog(Dog): def game(self): print("%s 跑去接飞盘" % self.name) class Person(object): def __init__(self, name): self.name = name def play_with_dog(self, dog): print("%s play with %s" % (self.name, dog.name)) dog.game() # bagong = Dog("八公") # 小明 play with 八公 八公 跳来跳去 bagong = ArmyDog("八公") # 小明 play with 八公 八公 跑去接飞盘 xiaoming = Person("小明") xiaoming.play_with_dog(bagong)
Person类中只需要让狗对象调用game方法,而不关心具体是什么狗;game方法是在Dog父类中定义的;
在程序执行时,传入不同的狗对象实参,就会产生不同的执行结果。
多态他解
多态的概念是应用于Java和C#这一类强类型语言中,而Python崇尚“鸭子类型”。
所谓多态:定义时的类型和运行时的类型不一样,此时就成为多态。
多态,同一个对象,多种形态。python默认支持多态。
多态: 同⼀个对象, 多种形态. 这个在python中其实是很不容易说明⽩的. 因为我们⼀直在⽤. 只是没有具体的说. 比如. 我们创建⼀个变量a = 10 , 我们知道此时a是整数类型. 但是我们可以通过程序让a = "alex", 这时, a⼜变成了字符串类型. 这是我们都知道的. 但是, 我要告诉你的是. 这个就是多态性. 同⼀个变量a可以是多种形态。
Python伪代码实现Java或C#的多态
class F1(object): def show(self): print 'F1.show' class S1(F1): def show(self): print 'S1.show' class S2(F1): def show(self): print 'S2.show' # 由于在Java或C#中定义函数参数时,必须指定参数的类型 # 为了让Func函数既可以执行S1对象的show方法,又可以执行S2对象的show方法,所以,定义了一个S1和S2类的父类 # 而实际传入的参数是:S1对象和S2对象 def Func(F1 obj): """Func函数需要接收一个F1类型或者F1子类的类型""" print obj.show() s1_obj = S1() Func(s1_obj) # 在Func函数中传入S1类的对象 s1_obj,执行 S1 的show方法,结果:S1.show s2_obj = S2() Func(s2_obj) # 在Func函数中传入Ss类的对象 ss_obj,执行 Ss 的show方法,结果:S2.show
Python “鸭子类型”
class F1(object): def show(self): print 'F1.show' class S1(F1): def show(self): print 'S1.show' class S2(F1): def show(self): print 'S2.show' def Func(obj): print obj.show() s1_obj = S1() Func(s1_obj) s2_obj = S2() Func(s2_obj)
相关文章推荐
- python面向对象三大特性之继承、多态、封装
- Python面向对象 ----多态特性
- Python 学习笔记 - 面向对象(封装,继承和多态)
- Python3 与 C# 面向对象之~继承与多态
- Python面向对象之类的封装、继承与多态
- 6.7Python面向对象(7):多态和动态绑定
- Python3 与 C# 面向对象之~继承与多态
- 初学Python的学习笔记8----面向对象、数据封装、访问限制、继承和多态
- python基础(面向对象(对象魔法三大特征)、多态)
- 17-python3面向对象之多态
- Python面向对象(一):继承,多态
- python面向对象--封装,继承,多态
- Python 面向对象之多态
- python3全栈开发-面向对象的三大特性(继承,多态,封装)之继承
- Python-面向对象(组合、封装与多态)
- Python3面向对象----------多态
- Python面向对象,类,继承,多态及鸭子类型,获取类的类型,方法和属性(类似java的反射)
- Python学习(七)面向对象 ——继承和多态
- Python学习之面向对象(封装、继承、多态)
- Python之面向对象的组合、多态、菱形问题、子类中重用父类的两种方式