Python中abc

2021-04-20 06:26

阅读:672

标签:指定   异常   bst   instant   anim   必须   pass   code   类的方法   

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语言特性 - 鸭子类型
“当一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子”

Python中abc

标签:指定   异常   bst   instant   anim   必须   pass   code   类的方法   

原文地址:https://www.cnblogs.com/linqiaobao/p/13285731.html


评论


亲,登录后才可以留言!