【问题标题】:Do I need to provide type hints for methods overriding `@abstractmethod`s?我是否需要为覆盖`@abstractmethod`s 的方法提供类型提示?
【发布时间】:2020-11-30 14:02:56
【问题描述】:

鉴于这两个类:

class MyClass(ABC):
    @abstractmethod
    def my_method(self, my_parameter: str):
        pass
    
class MySecondClass(MyClass):
    def my_method(self, my_parameter): 
        pass

my_method 中的MySecondClass 中的my_parameter 是否具有基于PEP 484Anystr 推断类型?我在链接文档中找不到详细说明上述内容的示例。

【问题讨论】:

    标签: python types subclass type-hinting mypy


    【解决方案1】:

    它是Any。您可以通过运行 mypy 来尝试一下:

    from abc import ABC, abstractmethod
    
    class MyClass(ABC):
        @abstractmethod
        def my_method(self, my_parameter: str):
            pass
        
    class MySecondClass(MyClass):
        def my_method(self, my_parameter):
            reveal_type(my_parameter)
            pass
    
    MySecondClass().my_method(3)
    

    Withwithout --check-untyped-defs flag,这通过了类型检查,reveal_typeAny 报告为类型。 (没有标志,方法体的类型检查也会被跳过。)


    请注意,即使使用注释,也允许覆盖方法具有与覆盖方法不同的签名,只要覆盖方法的签名更宽松。例如,采用Animal 的方法可以覆盖采用Dog 的方法。

    【讨论】:

      猜你喜欢
      • 2014-04-18
      • 2013-01-02
      • 2017-05-28
      • 2017-08-15
      • 2018-12-05
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      • 2020-07-23
      相关资源
      最近更新 更多