如何在不使用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的类型是通过键入模块声明的

普特谢夫

如果没有初始化本地PARAMS喜欢param0param2没有评估,所以Python解释器没有关于他们的存在或类型的信息。

您唯一的可能性是收集__init__method的参数使用示例结构:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在不使用Python初始化新类的情况下编辑继承类的属性?

在不使用指针的情况下,如何允许未初始化类类型的对象并确定何时是这种情况?

如何在不使用Python实例化的情况下获取类的类型?

如何在不初始化或构造对象的情况下从对象获取属性

如何在不使用'href'属性的情况下初始化jQuery UI Tabs?

如何在不使用匿名对象的情况下初始化列表初始值设定项中的对象?

TypeScript:如何在不使用明确赋值断言的情况下使用 setter 初始化类的成员?

如何在不使用常量数组大小的情况下初始化私有类中的数组?

如何在不使用gcloud auth登录创建的凭据文件的情况下初始化GoogleCredentials对象

如何在不使用现有Cookie的情况下初始化WKWebView

如何在SwiftUI中不使用某些View {}的情况下初始化View?

如何在没有初始化程序的情况下使用 TopLevel 对象?

如何在不使用 OPENJSON 的情况下获取 json 对象属性

在不使用初始化方法的情况下将哈希传递给类

如何在不使用eval()的情况下编写javascript十六进制初始化程序?

如何在不使用命名空间 chrono 的情况下初始化 std::chrono::duration 常量?

如何在不使用Reachability类的情况下获取iPhone的当前活动网络类型(WiFi或3G)

如何在运行时不使用@PostContruct的情况下使用数据库中的值初始化inputtextfield?

如何在不初始化列表的情况下追加到Python列表?

如何在Java中不初始化的情况下使用数组

如何在没有 IV(初始化向量)的情况下使用 Cipher

如何在不使用instanceOf或getClass()的情况下知道类类型?

如何在不使用semctl第四参数并集semun的情况下初始化信号量,因为它是可选的?

如何在不使用C#中的new关键字初始化变量的情况下用值填充数组变量?

如何在不使用类或ID的情况下选择相同的属性?

如何在不使用或getClass()实例的情况下检查对象的类型

如何在不使用过多if子句的情况下获取类型?

数组对象数组,如何在不使用属性名称的情况下访问单个元素?

如何在不使用其属性的情况下指定对象