多态是面向对象三大特性之一。
多态简单来说就是一类事物具有多种形态,指的是:即使不知道一个变量所引用的对象是什么类型,依然可以通过这个变量调用方法,在运行过程中,根据变量所引用的对象的类型,多态的决定调用哪个对象的方法。
多态:
多态只是一种调用方法的技巧,不会影响到类的内部设计。
class Animal(object):
def __init__(self,name):
self.name = name
def bark(self):
print('动物在叫')
class Dog(Animal): # 继承自父类Animal
def bark(self): # 重写父类的bark方法
print(f'{self.name}在汪汪叫……')
class Cat(Animal):
def bark(self):
print(f'{self.name}在喵喵叫……')
class Person(object):
def __init__(self,name):
self.name = name
# 传入不同的对象,执行不同的方法
def game_with_animal(self,animal): # 根据传入的animal所引用的对象类型,来决定调用哪一个对象的方法
print(f'{self.name}和{animal.name}在一起玩游戏。')
animal.bark()
dog = Dog('旺财')
tom = Cat('汤姆')
p = Person('星星')
# 传入不同的对象,看执行结果
p.game_with_animal(dog) # 传入的是Dog所引用的对象,所以调用的是Dog类中的方法
p.game_with_animal(tom)
# 根据传入的obj所引用的对象类型,来决定调用的是哪一个类中的bark方法
def demo(obj):
obj.bark()
demo(Dog('旺财')) # 传入的是Dog类的实例对象,则执行Dog类中的方法
demo(Cat('汤姆')) # 传入的是Cat类的实例对象,则执行Cat类中的方法
多态的优点
增加代码的灵活度。
动态语言和静态语言(如Java)关于多态
动态语言的多态崇尚‘鸭子类型’,就是说当一只鸟走起来像鸭子、游起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。在鸭子类型中,不需要关心对象是什么类型,只关心对象的行为。Python就是一种动态语言,可以在创建对象之后,动态的绑定属性和方法。
静态语言实现多态,需要满足三个必要条件:继承、方法重写、父类引用指向子类对象。
© 版权声明
本站网络名称:
尤尤博客
本站永久网址:
https://www.yxfseo.cn
网站侵权说明:
本网站的文章部分内容可能来源于网络,仅供大家学习与参考,请在24H内删除。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
1 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
2 本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报。
3 本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
THE END
暂无评论内容