Python中abc


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語言特性 - 鴨子類型
“當一只鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子,那么這只鳥就可以被稱為鴨子”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM