类型提示中的子类

类型提示中的子类

本文介绍了类型提示中的子类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I want to allow type hinting using Python 3 to accept sub classes of a certain class. E.g.:

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

现在输入以下代码时:

process_any_subclass_type_of_A(B)

我收到一个 PyCharm IDE 提示预期类型 A,改为得到类型 [B]."

I get an PyCharm IDE hint 'Expected type A, got Type[B] instead.'

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

How can I change type hinting here to accept any subtypes of A?

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

According to this (https://www.python.org/dev/peps/pep-0484/#type-definition-syntax, "Expressions whose type is a subtype of a specific argument type are also accepted for that argument."), I understand that my solution (cls: A) should work?

推荐答案

当您指定 cls: A 时,您是说 cls 需要一个 实例 类型为 A.将 cls 指定为类型 A(或其子类型)的类对象的类型提示使用 typing.Type.

When you specify cls: A, you're saying that cls expects an instance of type A. The type hint to specify cls as a class object for the type A (or its subtypes) uses typing.Type.

from typing import Type
def process_any_subclass_type_of_A(cls: Type[A]):
    pass

来自类对象的类型:

有时你想谈论从一个继承的类对象给定的班级.这可以拼写为 Type[C],其中 C 是一个类.在换句话说,当C是一个类的名字时,使用C来注释一个参数声明该参数是 C(或C 的子类),但使用 Type[C] 作为参数注解声明参数是从 C(或 C 本身)派生的类对象.

这篇关于类型提示中的子类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-20 09:21