概念:一个类所延伸的多种形态。调用时的多种形态。
class Animal(object): def jiao(self): pass class Dog(Animal): def jiao(self): print("wangwangwang") class Cat(Animal): def jiao(self): print("miaomiaomiao") def test(obj): obj.jiao() d = Dog() c = Cat() test(d) test(c)
多态在python中的体现:
鸭子类型:动态类型的一种风格,只要一个对象,会走、会游泳、会叫;那它就可以当做一个鸭子进行处理。关注点在于对象的“行为和属性”;而非对象的类型。
多以,在python中,没有真正意义上的多态,也不需要多态。
补充:
抽象类:一个抽象出的类,并不是某个具体化的类,不能直接创建实例化的类,创建会报错。
抽象方法:抽象出来的一个方法,不具备具体实现,不能直接调用。子类不实现会报错。
python中的实现:无法直接实现,需要借助一个模块,import abc->设置类的元类为abc.ABCMeta->使用装饰器修饰抽象方法@abc.abstractmethod。
抽象类中如果有抽象方法,子类一定要实现抽象方法,不然会报错。
import abc class Animal(object, metaclass=abc.ABCMeta): @abc.abstractmethod def jiao(self): pass @abc.abstractclassmethod def test(cls): pass class Dog(Animal): def jiao(self): print("wangwangwang") @classmethod def test(cls): print("xxxxx") class Cat(Animal): def jiao(self): print("miaomiaomiao") def test(obj): obj.jiao() # d = Dog() # c = Cat() # test(d) # test(c) # a = Animal() # a.jiao() d = Dog() d.jiao() d.test()