Python 知识要点:多态

多态(英语:Polymorphism),是指物件导向程式执行时,相同的讯息可能会送給多个不同的类別之物件,而 系统可依剧物件所属类別,引发对应类別的方法,而有不同的行为。简单来说,所谓多型意指相同的讯息給予不 同的物件会引发不同的动作称之。(维基百科)

 

多态,不同的子类对象调用相同的父类方法,产生不同的执行结果。

例如:1 + 2 >> 3;  "Wor" + "ld" >> "World";  + 可以根据不同的参数类型执行不同的操作,得到不同的结果。

 

关于多态,有一个被称作“鸭子类型”(duck typing)的东西,其含义在维基百科中被表述为:

在程序设计中,鸭子类型(英语:duck typing)是动态类型的一种风格。在这种风格中,一个对象有效的语 义,不是由继承自特定的类或实现特定的接口,而是由当前方法和属性的集合决定。这个概念的名字来源于由 James Whitcomb Riley 提出的鸭子测试:“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。

 

class Dog(object):
    def __init__(self, name):
        self.name = name

    def game(self):
        print("%s 去接飞盘" % self.name)


class XiaoTianDog(Dog):
    def game(self):
        print("%s 飞天" % self.name)


class Person(object):
    def __init__(self, name):
        self.name = name

    def game_with_dog(self, dog):
        print("%s 和 %s 快乐的玩耍" % (self.name, dog.name))

        # 让狗玩耍
        dog.game()


# 1.创建一个狗对象
# 不同的子类对象调用相同的父类方法game
da_wang = Dog("大旺")
wang_cai = XiaoTianDog("飞天旺财")

# 2.创建一个小明对象
xiao_ming = Person("小明")

# 3.让小明调用和狗玩的方法
xiao_ming.game_with_dog(da_wang)
xiao_ming.game_with_dog(wang_cai)

 

class Animal:
    def __init__(self, name=""):
        self.name = name

    def talk(self):
        print("$%^$^$")


class Cat(Animal):
    def talk(self):
        print("MiMiMi")


class Dog(Animal):
    def talk(self):
        print("WoWoWo")


animal = Animal()
animal.talk()

jack = Cat("Jack")
jack.talk()

tom = Dog("Tom")
tom.talk()

 

posted @ 2020-01-05 22:42  颗粒成仓  阅读(162)  评论(0编辑  收藏  举报