如何在Python中强制子类使用抽象基类实现字段?

2024-06-26 14:54:18 发布

您现在位置:Python中文网/ 问答频道 /正文

抽象基类可以使用@abstractmethod装饰器强制方法的所有子类实现。类字段也可以这样做吗

假设我们有以下课程:

from abc import ABCMeta, abstractmethod


class AbsHero(metaclass=ABCMeta):
    @abstractmethod
    def say_hello():
        """Hero greeting"""
    

class GoodHero(AbsHero):
    def __init__(name: str):
        self.name = name
        
    def say_hello():
        print('Hi, my name is ' + self.name + '.')
        
        
class SneakyHero(AbsHero):
    def say_hello():
        print("I am sneaky, I don't have a name")

我希望强制AbsHero的所有子项都具有name字段,或者至少是属性。现在两个子类都是有效的。我能做什么,使GoodHero类工作良好,但SneakyHero声明会导致失败


Tags: nameselfhellodef装饰基类子类class