【问题标题】:How to print __init__ function arguments in python?如何在 python 中打印 __init__ 函数参数?
【发布时间】:2017-04-08 11:03:12
【问题描述】:

我正在尝试为它们的构造函数参数创建一个驻留在模块中的类名字典。

构造函数参数也应该是一个字典,我将在其中存储定义的参数的默认值。

任何线索都会非常有帮助。提前致谢。

为了提供有关用例的更多详细信息,我在这里尝试针对图像image 中提到的所有类

我想获取构造函数参数,例如请参考下图 image

【问题讨论】:

标签: python-3.x


【解决方案1】:

如果我理解正确,您只需要__init__ 签名中的参数名称。

使用inspect module 其实很简单:

现代 python 答案

import inspect

signature = inspect.signature(your_class.__init__)
for name, parameter in signature.items():
    print(name, parameter.default, parameter.annotation, parameter.kind)

过时的答案

import inspect

signature = inspect.getargspec(your_class.__init__)
signature.args # All arguments explicitly named in the __init__ function 
signature.defaults # Tuple containing all default arguments
signature.varargs # Name of the parameter that can take *args (or None)
signature.keywords # Name of the parameter that can take **kwargs (or None)

您可以将默认参数映射到相应的参数名称,如下所示:

argument_defaults = zip(signature.args[::-1], signature.defaults[::-1])

【讨论】:

  • 请注意,getargspec 自 3.0 以来已被弃用。对于 2/3 兼容代码,应使用 getfullargspec,如果仅适用于现代 python,则应使用 signature()
  • 感谢您的回答。虽然当我尝试这段代码时,这给了我类似的东西:['self'] None args kwargs。但它不会打印实际参数。我可能在这里遗漏了一些东西。我用更多细节更新了问题以解释实际用例。
  • self 始终是__init__ 调用的第一个参数。你可以过滤掉它。否则我不明白你的问题。
  • 你可以做inspect.signature(your_class),没有__init__,在这种情况下它不会列出self
【解决方案2】:

最近,以下工作:

import inspect

signature = inspect.signature(yourclass.__init__)

for param in signature.parameters.values():
    print(param)

区别在于(与接受的答案相比),需要访问 parameters 实例变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2020-12-17
    • 2019-11-14
    • 1970-01-01
    相关资源
    最近更新 更多