python - 在初始化之前获取类 __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__
但论点没有出现在那里。
解决方案
您可以使用检查
目前尚不清楚您是否只想要参数名称或类型提示,您可以找到两者。假设类
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
推荐阅读
- java - 我在这个问题上的错误是什么。简单比较错误
- javascript - 更改我无法编辑的元素的 URL
- javascript - 如何为每个循环生成的 PHP 循环的每次迭代从列表中选择一个随机变量?
- python - “KeyError:标题”与 PyTube
- c - ISO C11 标准在哪里声明比较两个不指向同一个数组的指针是未定义的行为?
- c++ - 如何配置 bazel 以运行地址/内存清理程序?
- javascript - 使用 React 功能组件创建空数组变量
- artifactory - 如何使用 JFrog CLI 将 Build 和 Artifact 发布到 Artifactory?
- r - 如何告诉 r2pmml 我的变量是什么数据类型?
- node.js - 是否可以使用 puppeteer 将 Javascript 对象传递给 nodejs?