import abc
指定metaclass屬性將類設置為抽象類,抽象類本身只是用來約束子類的,不能被實例化
class Animal(metaclass=abc.ABCMeta): # 統一所有子類的方法
@abc.abstractmethod # 該裝飾器限制子類必須定義有一個名為talk的方法
def say(self):
print('動物基本的發聲...', end='')
class People(Animal): # 但凡繼承Animal的子類都必須遵循Animal規定的標准
pass
class Dog(Animal):
pass
class Pig(Animal):
pass
obj1 = People()
obj2 = Dog()
obj3 = Pig()
obj1.say() # 動物基本的發聲...卧槽
obj2.say() # 動物基本的發聲...汪汪汪
obj3.say() # 動物基本的發聲...吼吼吼
# 若子類中沒有一個名為talk的方法則會拋出異常TypeError,無法實例化
# TypeError: Can't instantiate abstract class People with abstract methods say
class Animal(metaclass=abc.ABCMeta): # 統一所有子類的方法
@abc.abstractmethod
def say(self):
print('動物基本的發聲...', end='')
class People(Animal):
def say(self):
super().say()
print('卧槽')
class Dog(Animal):
def say(self):
super().say()
print('汪汪汪')
class Pig(Animal):
def say(self):
super().say()
print('吼吼吼')
obj1 = People()
obj2 = Dog()
obj3 = Pig()
obj1.say() # 動物基本的發聲...卧槽
obj2.say() # 動物基本的發聲...汪汪汪
obj3.say() # 動物基本的發聲...吼吼吼
補充說明
Python語言特性 - 鴨子類型
“當一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子”