如何使用mypy在python中注释抽象基类中的类型

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

我想使用 mypy 检查 python 代码库。

在使用 mypy 注释 AbstractBaseClasses 时遇到两个问题:

  1. 如何禁用使用时出现
    NotImplemented? not callable
    错误:
class AbstractClass(ABC):

    @abstractmethod
    def get_something(self) -> List[str]:
        raise NotImplemented(f'You need to implement `get_something`!')

这里的动机是,当有人没有实现该方法时,我想显式引发异常。

  1. 如何在从 AbstractBaseClasses 继承的任何类中包含一些预定义的行为,并保持签名完整? 为了界面的缘故,我想保留
    -> CustomClass
    签名
class AnotherABC(ABC):
    @abstractmethod
    def info(self) -> CustomClass:
        self.logger.info('Info called')
        pass  # Cannot create CustomClass here -> not enough information
python python-typing mypy
1个回答
0
投票

最后决定:

  1. 删除显式异常,并改为使用文档字符串

    @abstractmethod
    def get_something(self) -> List[str]:
        """some small description"""
  1. 从抽象基类中删除日志记录并将其移至子类中。从技术上讲,也可以使用包装器来完成
© www.soinside.com 2019 - 2024. All rights reserved.