【问题标题】:Get class __init__ arguments before initialization在初始化之前获取类 __init__ 参数
【发布时间】:2021-08-17 09:35:01
【问题描述】:

我正在解析文本文件中的参数,我想将它们分配给正确的类(以初始化对象)。 现在,我想以一种“聪明”的方式做到这一点,即只有当这个类确实支持它时才向该类传递一个参数。

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

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

> 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__,但参数没有出现在那里。

【问题讨论】:

    标签: python class initialization arguments


    【解决方案1】:

    您可以使用inspect

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

    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 
    

    【讨论】:

    • 太好了,谢谢!我必须开始更多地使用inspect 包。第一个 sn-p 有错别字 Class -> class btw.
    • @duff18 感谢您指出,顺便说一句,您可以自己编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-12
    • 2019-09-05
    • 2012-09-09
    • 1970-01-01
    • 2021-10-10
    • 2012-05-18
    • 2016-12-30
    相关资源
    最近更新 更多