首页 > 解决方案 > 在初始化之前获取类 __init__ 参数

问题描述

我正在解析文本文件中的参数,我想将它们分配给正确的类(以初始化对象)。现在,我想以一种“聪明”的方式做到这一点,也就是说,如果这个类确实支持它,那么只将一个参数传递给这个类。

在初始化对象之前,我如何“询问”一个类它接受哪些参数?

这是我想要实现的一些伪代码:

> args_class = Class.magic_get_arguments()
> args_class
['a', 'b']
> args_all_classes # already available
['a', 'b', 'c', 'd']
> args_to_pass_to_class = set(args_class) & set(args_all_classes)
# then use only args_to_pass_to_class when initializing a Class object

我曾尝试查看dir班级和班级,__init__但论点没有出现在那里。

标签: pythonclassinitializationarguments

解决方案


您可以使用检查

目前尚不清楚您是否只想要参数名称或类型提示,您可以找到两者。假设类

class A:
    def __init__(self, arg1, arg2):
        pass

要查找名称,请执行以下操作:

args_class = list(inspect.signature(A).parameters)
args_class
['arg1', 'arg2']

要查找类型提示以及各种其他信息,您可以遍历参数值:

for arg in inspect.signature(A).parameters.values():
    arg.name # parameter name like before
    arg.annotation # parameter type hint, returns inspect._empty if no type hint exists
    arg.default # returns the default argument for the parameter, or inspect._empty if the parameter has no default
    arg.kind # returns inspect._POSITIONAL_ONLY if parameter is only positional and inspect._POSITIONAL_OR_KEYWORD if argument can be given positionally or by keyword 

推荐阅读