因此,我有一个将类作为参数的函数(不是类实例!)。
如何在功能注释中指定
我的意思是:
def add(a: int, b: int):
但是我不能这样做:
def my_func(cls: class):
由于类是类定义的保留字。我该如何解决?
您可以使用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
或,则IDE应该正确地进行投诉Type
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句