代码改变世界

Python 多态

2018-06-19 08:09  钱先生  阅读(235)  评论(0编辑  收藏  举报

多态(polymorphism)

  • 含义: 允许将你对象设置成为和一个或更多其它子对象相等的技术, 赋值之后, 父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作. 即: 允许将子类类型的指针赋值给父类类型的指针.
  • 作用: 接口重用
    • 即为了类在继承和派生的时候,保证使用"家谱中任一类的实例的某一属性时的正确调用."
    • 封装可以隐藏实现细节, 使得代码模块化; 继承可以扩展已存在的代码模块(类);它们的目的都是为了--代码重用.
  • Python不直接支持多态, 但是可以间接实现.

 

#!/usr/bin/python
# -*- coding: utf-8 -*-


class Animal:
    def __init__(self, name):  # constructor of the class
        self.name = name

    def talk(self):  # Abstract method, defined by convention only. 不重构就报错.
        raise NotImplementedError("Subclass must implement abstract method")  # 实现一调用这个方法就抛错误. 类似java中的throw


class Cat(Animal):
    def talk(self):
        return "Meow!"


class Dog(Animal):
    def talk(self):
        return "Woof! Woof!"


# 实现方法1
d = Dog('dd')
c = Cat('cc')
def animal_talk(obj):  # 如果直接Animal.talk(d)是没法调用talk的, 因为d只是传给了self, 要想执行talk()方法, 还需要一个obj.
    print(obj.talk())


animal_talk(d)
animal_talk(c)


# 实现方法2
# animals = [Cat('Missy'), Dog('Lassie')]
#
# for animal in animals:
#     print(animal.name+':'+animal.talk())
多态