from abc import ABCMeta,abstractmethod
class Pet(object,metaclass=ABCMeta):
'''宠物'''
def __init__(self,nickname):
self._nickname=nickname
@abstractmethod
def make_voice(self):
'''发出声音'''
pass
class Dog(Pet):
'''狗'''
def make_voice(self):
print("%s:汪汪汪..."%self._nickname)
class Cat(Pet):
'''猫'''
def make_voice(self):
print("%s:喵喵喵"%self._nickname)
def main():
pets=[Dog('旺财'),Cat('凯蒂'),Dog('大黄')]
for pet in pets:
pet.make_voice()
if __name__=='__main__':
main()
1.抽象类不能被实例化
2.在类中继承ABC模块ABCMeta元类和通过abstractmethod装饰器修饰,就成了一个抽象类
3.类是从一堆对象中抽取相同的内容而来的,那么抽象类就是从一堆类中抽取相同的内容而来的,内容包括数据属性和函数属性。
4.抽象类函数属性,指定义,不实现
5.Dog和Cat两个子类分别对Pet类中的make_voice抽象方法进行了重写并给出了不同的实现版本,当我们在main函数中调用该方法时,这个方法就表现出了多态行为