如何为 Python 中的抽象 class 创建抽象属性?

How to create an abstract attribute for an abstract class in Python?

我已经发现一些类似的问题,他们试图创建抽象属性,他们都建议使用 @property@abc.abstractmethod 来实现 here。有很多类似的主题,但我找不到不使用 @property 装饰器的方法。我不想使用它的原因是因为我不想在我的具体 class 中创建 settergetter 方法。我只是想强制执行我的具体 classes 将具有特定属性,例如 self.filter_name,它包含 class 名称的加密版本。

这是我目前使用 @property@abc.abstractmethod 装饰器的摘要 class:

import abc
from typing import List

class DataFilter:
    @property
    @abc.abstractmethod
    def filter_name(self)-> str:
        """Returns the filter name encrypted"""
        pass

如果我执行上述操作并尝试将具体 class 中的 self.filter_name 属性设置为特定值,我会得到一个 AttributeError: can't set attribute。我希望在我的具体 class.

中只包含类似 self.filter_name = "blabla" 的内容

执行此操作的方法不是使用 abstractmethod,而是通过 __init_subclass__

class DataFilter:
    def __init_subclass__(cls, **kwargs):
       super().__init_subclass__(**kwargs)
       try:
           cls.filter_name
       except AttributeError:
           raise TypeError("Can't instantiate class DataFilter without name 'filter_name'")
    

您可以对 cls.filter_name 的值执行其他测试(如果存在)。