簡體   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