Python 在函数注释中指定类类型

Python 在函数注释中指定类类型,python,Python,所以我有一个函数,它将类作为参数(而不是类实例!) 如何在函数注释中指定此项 我的意思是: def add(a: int, b: int): 但我不能这么做: def my_func(cls: class): 因为类是类定义的保留字。如何解决此问题?您可以使用cls:type 就像每个整数都是int的实例一样,每个类都是类型的实例 演示: 您还可以使用键入模块中的键入,根据文档,该模块是 可用于注释类对象的特殊构造 使用Type.Type比cls:Type更灵活 例如,如果希望提示参数可以是

所以我有一个函数,它将类作为参数(而不是类实例!)

如何在函数注释中指定此项

我的意思是:

def add(a: int, b: int):
但我不能这么做:

def my_func(cls: class):

因为类是类定义的保留字。如何解决此问题?

您可以使用
cls:type

就像每个整数都是
int
的实例一样,每个类都是
类型的实例

演示:

您还可以使用
键入
模块中的
键入
,根据文档,该模块是

可用于注释类对象的特殊构造

使用
Type.Type
cls:Type
更灵活

例如,如果希望提示参数可以是任何类对象,只需使用
cls:Type

如果参数应该是属于类
Foo
(或
Foo
本身)的子类的任何类对象,则可以编写
cls:Type[Foo]

对评论作出答复:

就像你的例子一样。类对象是类型的实例,但类实例不是。这就是它抱怨的原因:去
func(Person)
没问题,但
func(Person('Steve',22))
不行


在第二种情况下,您正在做您明确表示不想做的事情:传递
Person
的实例,而不是类
Person
。因此,如果您注释了
类型
类型
,您的IDE应该会抱怨,我已经想到了,我只是不喜欢PyCharm说“期望类型”类型“得到了类”instead@Desiigner输入import Type
然后输入
cls:Type
,它是否会抱怨
?如果您要注释为
Type
的一种类型,您最好不要麻烦
int
/
list
/
dict
对于
isinstance(obj,type)
..@JonClements-right都是正确的,但不是
int
/
list
/
dict
的实例(如您所知)。我想OP只是想确定论点是一个类
isinstance(int(),type)
->
False
@timgeb我想我的整个想法很奇怪。如果我说my_function(Foo)就可以了,但是我不能为这个类设置任何属性,因为它变成了my_function(Foo(attrs))。虽然你的答案是正确的。
>>> class Foo: pass
>>> 
>>> isinstance(Foo, type)
>>> True
>>> isinstance(Foo(), type)
>>> False