相关疑难解决方法(0)

类型提示中的子类

我想允许使用Python 3的类型提示来接受某个类的子类.例如:

class A:
    pass

class B(A):
    pass

class C(A):
    pass

def process_any_subclass_type_of_A(cls: A):
    if cls == B:
        # do something
    elif cls == C:
        # do something else
Run Code Online (Sandbox Code Playgroud)

现在输入以下代码时:

process_any_subclass_type_of_A(B)
Run Code Online (Sandbox Code Playgroud)

我得到一个PyCharm IDE提示'预期类型A,而不是类型[B].

如何在此处更改类型提示以接受A的任何子类型?

根据这个(https://www.python.org/dev/peps/pep-0484/#type-definition-syntax,"该参数也接受其类型是特定参数类型的子类型的表达式.") ,我明白我的解决方案(cls: A)应该有效吗?

python subclass type-hinting

20
推荐指数
4
解决办法
7873
查看次数

Python 重写子类中方法返回的类型提示,无需重新定义方法签名

float我有一个基类,在方法的返回上有类型提示。

在子类中,在不重新定义签名的情况下,我可以以某种方式将方法返回的类型提示更新为 吗int


示例代码

#!/usr/bin/env python3.6


class SomeClass:
    """This class's some_method will return float."""

    RET_TYPE = float

    def some_method(self, some_input: str) -> float:
        return self.RET_TYPE(some_input)


class SomeChildClass(SomeClass):
    """This class's some_method will return int."""

    RET_TYPE = int


if __name__ == "__main__":
    ret: int = SomeChildClass().some_method("42"). # 
    ret2: float = SomeChildClass().some_method("42")
Run Code Online (Sandbox Code Playgroud)

我的 IDE 抱怨类型不匹配:

pycharm期望类型float

发生这种情况是因为我的 IDE 仍在使用SomeClass.some_method.


研究

我认为解决方案可能是使用泛型,但我不确定是否有更简单的方法。

Python:如何覆盖子类中实例属性的类型提示?

建议也许使用实例变量注释,但我不确定如何对返回类型执行此操作。

python oop type-hinting method-signature

5
推荐指数
1
解决办法
6017
查看次数

标签 统计

python ×2

type-hinting ×2

method-signature ×1

oop ×1

subclass ×1