对于弱类型的语言来说,变量并没有声明类型,因此,同一个变量完全可以在不同的时间引用不同的对象,当同一个变量在调用不同的方法时,完全可能呈现多种行为(具体呈现出哪种行为由该变量所引用的对象决定),这就是所谓的多态。从下面这个例子来体会python多态的优势。
class Dog(object):
def dog_work(self):
print('狗正在工作')
class SearchDog(Dog):
def dog_work(self):
print('搜救犬正在搜索生命')
class PoliceDog(Dog):
def dog_work(self):
print('警犬正在抓坏人')
class FlyDog(Dog):
def dog_work(self):
print('飞天犬正在飞')
class BlindDog(Dog):
def dog_work(self):
print('导盲犬正在领路')
class Person(object):
def __init__(self, dog=None):
self.dog = dog
def work_with_dog(self):
self.dog.dog_work()
sd = SearchDog()
pd = PoliceDog()
fd = FlyDog()
bd = BlindDog()
p = Person(bd)
p.work_with_dog()
同一个变量p在执行同一个方法时,由于p 指向的对象不同,因此它呈现不同的行为特征,这就是多态。
当程序涉及Dog 类的dog_work方法时,该方法所需要的参数是非常灵活的,程序为该方法传入的参数只要具有指定方法就行,至于该方法呈现怎样的行为特征,则完全取决于对象本身,这就大大提高了dog_work()方法的灵活性。