所以我有一个将类作为参数的函数(不是类实例!)。
如何在功能注释中指定
我的意思是:
def add(a: int, b: int):
但是我不能这样做:
def my_func(cls: class):
由于类是类定义的保留字。我该怎么解决?
答案 0 :(得分:1)
您可以使用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
的 instance 。因此,如果您对type
或Type
进行了注释,您的IDE应该会抱怨。