如何在不使用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 的类。我借助 inspect importlib 模块动态地收集了它们及其文档等。但是我还必须收集它们的params和params的类型。

试图得到类似的东西:

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

我如何不初始化类?

PS1:当我初始化它们时很容易,但是有很多类,每个类都有不同的初始化值。所以我必须在不初始化它们的情况下这样做。

PS2:每个打字员的类型都通过键入模块来声明

解决方法

没有初始化的本地参数,例如param0param2not evaluated,因此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']

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...