繁体   English   中英

如何获取 class object 的属性类型而不在 python 中初始化它

[英]How to get types of attributes of a class object without initializing it in 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 我在检查importlib模块的帮助下动态收集了它们、它们的文档等,但我还必须收集它们的参数和参数的类型。

试图得到这样的东西:

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

我怎么能在不初始化类的情况下做到这一点?

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

PS2:每个属性的类型都是通过键入模块声明的

没有初始化像param0param2这样的本地参数不会被评估,所以 Python 解释器没有关于它们的存在或类型的信息。

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

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']在你的情况下。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM