在函数注释中指定类类型

时间:2018-11-10 16:21:26

标签: python

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

如何在功能注释中指定

我的意思是:

def add(a: int, b: int):

但是我不能这样做:

def my_func(cls: class):

由于类是类定义的保留字。我该怎么解决?

1 个答案:

答案 0 :(得分:1)

您可以使用cls: type

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

演示:

>>> class Foo: pass
>>> 
>>> isinstance(Foo, type)
>>> True
>>> isinstance(Foo(), type)
>>> False

您还可以在Type模块中使用typing,根据文档,该模块为

  

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

使用typing.Typecls:type更灵活。

例如,如果要暗示参数可以是任何类对象,则只需使用cls:Type

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

Read the docs for more info

回复评论:

  

就像您的示例中一样。类对象是类型的实例,但不是。因此,这就是它抱怨的原因:func(Person)没事,而func(Person('Steve', 22))没事。

在第二种情况下,您正在执行您明确表示不想执行的操作:传递Person而不是类Person instance 。因此,如果您对typeType进行了注释,您的IDE应该会抱怨。