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