如果我使用动态类型,我如何自动完成python代码



下面是一个例子:

class Service:
def __init__(self):
self.data = dict()
def get(self, clazz):
# clazz is a class Type, and always return an instance of clazz
return self.data[clazz]
def register(self, clazz, *args, **kwargs):
self.data[clazz] = clazz(*args, **kwargs)
class A:
def method_of_a(self):
pass
class B:
pass
service = Service()
service.register(A)
service.register(B)

现在我完成了服务代码,并像一样继续编码

x = service.get(A)
x.method_of_a()

代码是有效的,但有一个问题,当我编码时,当你输入时,IDE(本例中为pycharm(将不会显示x的函数

x.

即使我这样修改我的代码,它也不起作用

def get(self, clazz):
result: clazz = self.data[clazz]
return result

我想知道是否有任何方法可以实现Service,即IDE可以识别返回值的类型?

使用typing.TypeVartyping.Type键入hint您的.get()函数,表示";如果用T的类型调用,则返回T":

from typing import TypeVar, Type
T = TypeVar('T')

class Service:
def __init__(self):
self.data = dict()
def get(self, clazz: Type[T]) -> T:
return self.data[clazz]
def register(self, clazz, *args, **kwargs):
self.data[clazz] = clazz(*args, **kwargs)

class A:
def method_of_a(self):
pass

s = Service()
s.register(A)
x = s.get(A)
x.method_of_a()
reveal_type(x)

当使用mypy运行时,reveal_type()调用打印出

so73566368.py:24: note: Revealed type is "so73566368.A"

最新更新