问题描述
我想允许使用 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
本身)派生的类对象.
这篇关于类型提示中的子类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!