赞
踩
**
**
多态顾名思义多种状态,在python中,不同对象调用同一个接口,表现出不同的状态,称为多态
class Duck(): def who(self): print("I am a duck") class Dog(): def who(self): print("I am a dog") class Cat(): def who(self): print("I am a cat") if __name__ == "__main__": duck=Duck() dog=Dog() cat=Cat() duck.who() dog.who() cat.who()
输出结果:
I am a duck
I am a dog
I am a cat
以上代码是多态吗?虽然不同的对象调用同一个接口表现出不同状态,但是!!这不是多态!
要实现多态有两个前提:
1.继承:多态必须发生在父类与子类之间
2.重写:子类重写父类方法
把以上代码进行修改,使之继承父类,才实现多态,如下:
class Animal(): def who(self): print("I am an Animal") class Duck(Animal): def who(self): print("I am a duck") class Dog(Animal): def who(self): print("I am a dog") class Cat(Animal): def who(self): print("I am a cat") if __name__ == "__main__": duck=Duck() dog=Dog() cat=Cat() duck.who() dog.who() cat.who()
其实以上代码实际貌似没啥用,为什么一定要去定义通过同一个函数名?我定义who1,who2,who3不可以吗?代码量也一样啊!
其实真正体验出多态好处的代码一般是这样写的
class Animal(): def who(self): print("I am an Animal") class Duck(Animal): def who(self): print("I am a duck") class Dog(Animal): def who(self): print("I am a dog") class Cat(Animal): def who(self): print("I am a cat") def func(obj): obj.who() if __name__ == "__main__": duck=Duck() dog=Dog() cat=Cat() func(duck) func(dog) func(cat)
仅仅需要一个函数,就可以把不同对象的who函数表现出来了。这就增加了程序的灵活性,以不变应万变,不管你类中的who()写得如何得天花乱坠,我都可以用一个统一的形式来调用。另外,它增加了程序的可扩展性,不管是我们或者调用者,如果想增加新的功能,都不需要修改原来的代码。
例如,我想新增一个bird类,仅需增加以下代码,无需修改原来的。
class Bird(Animal):
def who(self):
print("I am a bird")
对于调用者,也仅需增加以下代码,无需修改原来的。
bird=Bird()
func(bird)
多态的好处:一是增加程序的灵活性,二是增加程序的可扩展性
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。