vdb*_*oor 26 python django-models type-hinting python-3.x
我应该如何在Python中为类类型编写类型提示?考虑以下代码:
class A(object):
pass
class B(A):
pass
def register(cls: type[A]):
assert issubclass(cls, A)
register(A)
register(B)
Run Code Online (Sandbox Code Playgroud)
type[A]写这个是正确的方法吗?如果我只是使用cls: A它将意味着cls是一个实例A,但我想说的cls是一个类/类型,至少是子类A.
具体来说,我想指出的是参数应该是Django模型类型.
mbd*_*vpl 32
似乎其他当前(2016年9月22日)答案不正确.根据PEP 484(关于类型提示),存在一个类对象类型的提示,称为Type [C].根据typing模块的文档,您可以使用typing.Type [C]来实现您想要的.我自己使用的是Python 3.5.2.
引用PEP:
有时您想要讨论类对象,特别是从给定类继承的类对象.这可以拼写为Type [C],其中C是一个类.澄清:虽然C(当用作注释时)引用类C的实例,但类型[C]引用C的子类.
并引用文档:
用C注释的变量可以接受类型C的值.相反,用Type [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)
Run Code Online (Sandbox Code Playgroud)
您可以使用mypy静态检查此类代码,它应该在简单的情况下工作 - 请注意mypy是一项正在进行的工作,截至目前,有几个问题打开了类型[C]提示.
| 归档时间: |
|
| 查看次数: |
8655 次 |
| 最近记录: |