使用以下代码:
import dataclasses
@dataclasses.dataclass
class A:
a: int
b: float
A(<cursor location>
如果我现在让我的 LSP Pyright 驱动程序在光标位置给我建议,它会找到“a”和“b”参数。
我如何在我自己的班级中做到这一点?考虑以下几点:
class Parent:
def __init__(self, **kvargs):
# This is done.
for k, v in kvargs.items():
setattr(self, k, v)
def __init_subclass(cls) -> None:
# How to add a and b typing information to A.__init__ ?
print(get_type_hints(cls))
setattr(cls, "__init__",
# magic? how to do this:
def __init__(a: int, b: int): # how to generate function signature from get_type_hints ?
super().__init__(a=a, b=b)
)
class A(Parent):
a: int
b: float
A(<cursor location
我不是在问如何动态地从类中获取输入信息。假设我想将
a: int, b: float
函数精确添加为 A.__init__
,但类型是动态的。我问如何从从另一种类型提取的 get_type_hints
动态设置构造函数的类型提示。
这个问题是关于更好的自动完成还是如何动态生成方法?
关于自动完成和输入信息。我编写了自己的
__init__
函数,它接受 *args, **kvargs
参数并手动检查它们。现在我想要自动完成并向其中添加 __annotations__
信息。我尝试浏览 dataclass
源代码,但是这是我无法理解的魔法 https://github.com/python/cpython/blob/main/Lib/dataclasses.py#L471 .