从Python中的构造函数__init__中反省参数

Vy.*_*.Iv 5 python oop arguments introspection

什么是在__init__不创建新实例的情况下从中提取参数的方法.代码示例:

class Super:
    def __init__(self, name):
        self.name = name
Run Code Online (Sandbox Code Playgroud)

我看起来像Super.__dict__.keys()类型解决方案.只是为了检索名称参数信息而不添加任何值.有这样的选择吗?

Bah*_*rom 15

您可以使用 inspect

>>> import inspect
>>> inspect.getargspec(Super.__init__)
ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None)
>>> 
Run Code Online (Sandbox Code Playgroud)

编辑:inspect.getargspec实际上并没有创建实例Super,见下文:

import inspect

class Super:
    def __init__(self, name):
        print 'instantiated'
        self.name = name

print inspect.getargspec(Super.__init__)
Run Code Online (Sandbox Code Playgroud)

这输出:

### Run test.a ###
ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None)
>>> 
Run Code Online (Sandbox Code Playgroud)

请注意,instantiated从未打印过.

  • DeprecationWarning:自 Python 3.0 起,inspect.getargspec() 已弃用,请使用spectr.signature() 或inspect.getfullargspec() (3认同)