所以我有一个将类作为参数的函数(不是类实例!)。如何在函数注释中指定它我的意思是:def add(a: int, b: int):但我不能这样做:def my_func(cls: class):因为 class 是类定义的保留字。我该如何解决这个问题?
1 回答

FFIVE
TA贡献1797条经验 获得超6个赞
您可以使用cls: type.
就像每个整数都是 的实例一样int,每个类都是 的实例type。
演示:
>>> class Foo: pass
>>>
>>> isinstance(Foo, type)
>>> True
>>> isinstance(Foo(), type)
>>> False
您还可以Type从typing模块中使用,根据文档,它是
可用于注释类对象的特殊构造。
使用typing.Type比cls:type.
例如,如果您想暗示参数可以是任何类对象,您只需使用cls:Type.
如果参数应该是作为类Foo(或Foo本身)的子类的任何类对象,您可以编写cls: Type[Foo].
回应评论:
就像在你的例子中一样。类对象是类型的实例,但类实例不是。所以这就是它抱怨的原因:去
func(Person)
是好的,但func(Person('Steve', 22))
不是。
在第二种情况下,你在做什么,你明确表示你不想做的事情:传递一个实例的Person
,而不是类Person
。因此,如果您添加了注释type
或Type
.
添加回答
举报
0/150
提交
取消