【发布时间】:2017-04-08 11:03:12
【问题描述】:
我正在尝试为它们的构造函数参数创建一个驻留在模块中的类名字典。
构造函数参数也应该是一个字典,我将在其中存储定义的参数的默认值。
任何线索都会非常有帮助。提前致谢。
为了提供有关用例的更多详细信息,我在这里尝试针对图像image 中提到的所有类
我想获取构造函数参数,例如请参考下图 image
【问题讨论】:
标签: python-3.x
我正在尝试为它们的构造函数参数创建一个驻留在模块中的类名字典。
构造函数参数也应该是一个字典,我将在其中存储定义的参数的默认值。
任何线索都会非常有帮助。提前致谢。
为了提供有关用例的更多详细信息,我在这里尝试针对图像image 中提到的所有类
我想获取构造函数参数,例如请参考下图 image
【问题讨论】:
标签: python-3.x
如果我理解正确,您只需要__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 始终是__init__ 调用的第一个参数。你可以过滤掉它。否则我不明白你的问题。
inspect.signature(your_class),没有__init__,在这种情况下它不会列出self。
最近,以下工作:
import inspect
signature = inspect.signature(yourclass.__init__)
for param in signature.parameters.values():
print(param)
区别在于(与接受的答案相比),需要访问 parameters 实例变量。
【讨论】: