我应该如何在Python中为类类型编写类型提示?
class A(object):
pass
class B(A):
pass
def register(cls: type[A]):
assert issubclass(cls, A)
register(A)
register(B)
type[A]
是写这个的正确方法吗?
具体来说,我想指出的是,参数应该是
我应该如何在Python中为类类型编写类型提示?
class A(object):
pass
class B(A):
pass
def register(cls: type[A]):
assert issubclass(cls, A)
register(A)
register(B)
type[A]
是写这个的正确方法吗?
具体来说,我想指出的是,参数应该是
其他当前(2016年9月22日)的答案似乎不正确.根据PEP 484(关于类型提示),存在一个类对象类型的提示,称为Type[C].根据typing
模块的文档,你可以使用typing.Type[C]来实现你想要的.我自己也在用Python 3.5.2.
引用the PEP:
有时,您想讨论类对象,尤其是从给定类继承的类对象.这可以拼写为[C]类型,其中C是一个类.澄清一下:C(当用作注释时)指的是C类的实例,而类型[C]指的是C的子类.
并引用the docs:
用C注释的变量可以接受C类型的值.相比之下,用[C]注释的变量可以接受属于类本身的值——具体来说,它将接受C的类对象.
参考你的具体例子:
import typing
class A(object):
pass
class B(A):
pass
def register(cls: typing.Type[A]):
assert issubclass(cls, A)
register(A)
register(B)
您可以使用mypy静态地判断这样的代码,它应该可以在简单的情况下工作——但是要注意,mypy是一个正在进行的工作,到目前为止,关于类型[C]提示还有几个问题有待解决.