Python面向对象之多态
1
多态
多态是指一类事物有多种形态,比如动物类,可以有猫,狗,猪等等(一个抽象类有多个子类,因而多态的概念依赖于继承)。
class Animal(object): # 同一类事物:动物 def speak(self): passclass Cat(Animal): # 动物的形态之一:猫 def speak(self): print('喵喵')class Dog(Animal): # 动物的形态之二:狗 def speak(self): print('汪汪')class Pig(Animal): # 动物的形态之三:猪 def speak(self): print('嗷嗷')
2
多态性
注意:多态与多态性是两种概念。
多态性是指具有不同功能的函数可以使用相同的函数名,这样就可以用一个函数名调用不同内容的函数。在面向对象方法中一般是这样表述多态性:向不同的对象发送同一条消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。
class Animal(object): # 同一类事物:动物 def speak(self): passclass Cat(Animal): # 动物的形态之一:猫 def speak(self): print('喵喵')class Dog(Animal): # 动物的形态之二:狗 def speak(self): print('汪汪')class Pig(Animal): # 动物的形态之三:猪 def speak(self): print('嗷嗷')c = Cat()d = Dog()p = Pig()def func(obj): obj.speak()func(c) # opuput:喵喵func(d) # opuput:汪汪func(p) # opuput:嗷嗷
综合以上可以说多态性就是:一个接口,多种实现
多态性的好处:
增加了程序的灵活性,以不变应万变,不论对象千变万化,使用者都是同一种形式去调用,如func(obj)。
增加了程序可扩展性,通过继承Animal类创建了一个新的类,使用者无需更改自己的代码,还是用func(obj)去调用。
3
鸭子类型
什么是鸭子类型(Duck Typing)?鸭子类型可解释为,如果一只动物,走起来像鸭子或者叫起来像鸭子,那么就可以把它称之为鸭子。
python崇尚一种鸭子类型,类与类之间不用共同继承一个父类,只需要将它们做得像一种事物即可。
例如,如果想编写现有对象的自定义版本。
1、可以继承该对象。
2、可以创建一个外观和行为像,但与它无任何关系的全新对象。
class Duck(): # 定义一个鸭子类 def Walk(self): # 定义一个走路的函数 print("I walk like a duck")class Person(): def Walk(self): print("This person walk like a duck")def func(Duck): # 定义一个函数,并传入参数Duck Duck.Walk() # 调用Duck中的Walk方法duck = Duck()func(duck)# ouput: I walk like a duckperson = Person()func(person)# ouput: This person walk like a duck
从以上代码可以看出func传入的参数为duck时,依旧也可以传入person参数,因为Duck和Person都拥有共同的方法Walk。
长按可加小编微信哦~