[英]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:每個屬性的類型都是通過鍵入模塊聲明的
沒有初始化像param0
和param2
這樣的本地參數不會被評估,所以 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.