Python 类型暗示中的子类
我想允许使用Python3进行类型暗示,以接受某个类的子类。例如:Python 类型暗示中的子类,python,subclass,type-hinting,Python,Subclass,Type Hinting,我想允许使用Python3进行类型暗示,以接受某个类的子类。例如: 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_an
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]类型。”
如何更改此处的类型提示以接受A的任何子类型
根据这一点(,“类型为特定参数类型的子类型的表达式也可用于该参数”),我理解我的解决方案
(cls:a)
应该可以工作?当您指定cls:a
时,您是说cls
需要类型a
的实例。将cls
指定为a
类型(或其子类型)使用的类对象的类型提示
发件人:
有时,您想讨论从
给定的类。这可以拼写为Type[C]
,其中C
是一个类。在里面
换句话说,当C
是类的名称时,使用C
注释
参数声明该参数是C
(或
C
的子类),但使用Type[C]
作为参数注释
参数是从C
(或C
本身)派生的类对象
Python是否也会引发此错误?否则,它可能是PyCharm中的一个bug!对我来说,我在python控制台上试过了,它工作得很好。可能是PyCharm中的bug。是的,它正在工作,据我所知,类型提示是可选的。我仍然希望该方法的用户明确地知道在那里使用什么类。。。;myfunc(B())可以,(我们想处理实例),
B()
是[a]的子类的实例,而不是[a]的类[或子类]。或者def myfunc(cls:Type[a]):。。。;myfunc(B)
还可以,(我们想处理类)B
是一个类(或子类)a,而不是a的实例[或子类实例]。如果a的任何子类的实例是预期的,那会是什么样子?引用的链接建议定义一个TypeVar
,这是必要的吗?
from typing import Type
def process_any_subclass_type_of_A(cls: Type[A]):
pass