Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型暗示中的子类_Python_Subclass_Type Hinting - Fatal编程技术网

Python 类型暗示中的子类

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

我想允许使用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_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