Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中获取类对象的属性类型而不进行初始化_Python_Python 3.x_Python Typing - Fatal编程技术网

如何在python中获取类对象的属性类型而不进行初始化

如何在python中获取类对象的属性类型而不进行初始化,python,python-3.x,python-typing,Python,Python 3.x,Python Typing,前期信息 我们有一个运行在多台机器上的结构,这些机器通过使用json可序列化对象在设备之间传输数据来相互通信 我试图通过使用标记为这些类创建文档 问题 类BaseParams(JsonObject): “”“所有类的默认值”“” 定义初始化(自): self.param0:str=“测试” 类示例参数(BaseParams): “”“数据容器的示例类”“” 定义初始化(self,param1:str): super()。\uuuu init\uuuuu() self.param1:str=pa

前期信息

我们有一个运行在多台机器上的结构,这些机器通过使用json可序列化对象在设备之间传输数据来相互通信

我试图通过使用标记为这些类创建文档

问题


类BaseParams(JsonObject):
“”“所有类的默认值”“”
定义初始化(自):
self.param0:str=“测试”
类示例参数(BaseParams):
“”“数据容器的示例类”“”
定义初始化(self,param1:str):
super()。\uuuu init\uuuuu()
self.param1:str=param1
self.param2:int=0
我在py文件中有很多类,比如ExampleParams。我在inspect和importlib模块的帮助下动态收集了它们、它们的文档等,但我还必须收集它们的参数和参数类型

试图得到这样的东西:

resultdct={
“ExampleParams”:{“param0”:“str”,“param1”:“str”,“param2”:“int”}
}
如何在不初始化类的情况下执行该操作

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


PS2:每个属性的类型都是通过键入module来声明的,没有初始化本地参数,例如
param0
param2
是,因此Python解释器没有关于它们的存在或类型的信息

您唯一的可能就是收集
\uuuu init\uuu
方法的参数。使用示例结构:

导入检查
参数=[]
对于ExampleParams.mro()[::-1]中的父项:
parent\u init=inspect.getfullargspec(parent.\uuuu init\uuuuu)
#如果在方法签名中指定,则parent_init.annotations包含注释
对于父参数_init.args中的参数:
如果参数==“self”:
持续
params.append(param)

params=['param1']
在您的情况下。

我也必须收集param0、param1和param2,否则它就没有意义了。您可以查看
示例params.\uuuuuu init\uuuuu.\uuuu code\uuuuuuu
以查看解释器关于
\uuuu init\uuuuuuu
的所有信息。例如,
ExampleParams.\uuuuu init\uuuuu.\uuuu code\uuuu.co\u name
包含本地范围内的所有变量名。我认为唯一的选择是编写python文件解析器来提取感兴趣的信息。但我仍然无法访问param0,我想我会在
paramsclass的帮助下使用init。uuuu init\uuuu.code\uuu.co\u argcount
但是获取属性的类型提示仍然是
param0
只能通过遍历class
mro
来实现。类型提示同样只能通过
inspect.getfullargspec(ExampleParams.\uuuuu init\uuuuuuuuuuuuuuu)。注释
不完全是我想要的,但似乎它是唯一的解决方案