需要在所有子类中定义的类属性

问题描述 投票:0回答:1

我正在寻找一种方法来解决在基类中指定需要在所有子类中定义的类属性的问题。

我有一个

BaseClass
,其字符串属性为
action
。对于所有继承
BaseClass
的子类,我希望它们都必须定义
action
的属性。我知道我可以使用
@property
@abstractmethod
来做到这一点,但是有没有办法直接将其作为属性来做到这一点?我想象的伪代码:

class BaseClass:
    action: str


class ChildClass(BaseClass):
    def dummy_method(self):
        pass

# Should raise an error for not setting `action` 
# and if possible show an error with StaticAnalysis:
ChildClass()  
python inheritance
1个回答
0
投票

您可以通过使用 抽象基类 (

ABC
)
@property
装饰器来做到这一点:

from abc import ABC, abstractmethod


class BaseClass(ABC):
    @classmethod
    @property
    @abstractmethod
    def action(cls) -> str:
        raise NotImplementedError


class GoodChildClass(BaseClass):
    action = "foobar"


class BadChildClass(BaseClass):
    pass


if __name__ == '__main__':
    # Will work just fine
    good_child = GoodChildClass()

    # Will raise NotImplementedError
    bad_child = BadChildClass()
© www.soinside.com 2019 - 2024. All rights reserved.