如何在不初始化python的情况下获取类对象的属性类型



预信息

我们有一个在多台机器上运行的结构,这些机器通过使用json可序列化对象在设备之间传输数据来相互通信。

我正在尝试使用markdown为这些类创建文档。

问题


class BaseParams(JsonObject):
""" default values for all classes"""
def __init__(self):
self.param0: str = "test"

class ExampleParams(BaseParams):
""" example class for data container"""
def __init__(self, param1: str):
super().__init__()
self.param1: str = param1
self.param2: int = 0

我在py文件中有许多类,如ExampleParams。我在inspectimportlib模块的帮助下动态收集了它们、它们的文档等,但我也必须收集它们的params和params的类型。

试图得到这样的东西:

resultdict = {
"ExampleParams":{"param0":"str","param1":"str","param2":"int"}
}

如何在不初始化类的情况下执行

PS1:初始化它们很容易,但有很多类,每个类都有不同的初始化值。所以我想我必须在不初始化它们的情况下完成它。

PS2:每个atrribute的类型都由键入模块声明

在没有初始化的情况下,不会对param0param2等本地参数进行求值,因此Python解释器没有关于它们存在或类型的信息。

您唯一的可能是收集__init__方法的参数。使用示例结构:

import inspect
params = []
for parent in ExampleParams.mro()[::-1]:
parent_init = inspect.getfullargspec(parent.__init__)
# parent_init.annotations contains annotations if specified in method signature
for param in parent_init.args:
if param == 'self':
continue
params.append(param)

params = ['param1']

最新更新