获取调用对象的__init__的参数

时间:2018-08-29 18:28:22

标签: python python-2.7

有没有办法在python 2.7中获取对象的init参数值?我可以通过getargspec获取默认值,但我想访问传入的值

import inspect

class AnObject(object):
    def __init__(self, kw='', *args, **kwargs):
        print 'Hello'

anobj = AnObject(kw='a keyword arg')
print inspect.getargspec(anobj.__init__)

返回

Hello
ArgSpec(args=['self', 'kw'], varargs='args', keywords='kwargs', defaults=('',))

2 个答案:

答案 0 :(得分:2)

__init__的处理方式与任何其他功能均相同。因此,就像其他任何函数一样,其参数一旦返回就将被丢弃-除非您将其保存在此之前。

标准方法是将您以后需要的内容保存在实例的属性中:

class Foo:
    def __init__(self, a, b, *args, **kwargs):
        self.a = a
        self.b = b
        <etc>

"Dataclasses" introduced in 3.7简化了此过程,但require data annotations

import dataclasses

@dataclasses.dataclass
class Foo:
    a: int
    b: str

等效于:

class Foo:
    def __init__(self, a:int, b:str):
        self.a = a
        self.b = b

尽管看到Python decorator to automatically define __init__ variables,但这种精简在实践中不是很有用。

答案 1 :(得分:1)

您可以将它们存储为属性。

class AnObject(object):
    def __init__(self, kw='', *args, **kwargs):
        self.kw = kw
        self.args = args
        self.kwargs = kwargs 

然后只打印它们:

anobj = AnObject(kw='a keyword arg')
print anobj.kw
print anobj.args
print anobj.kwargs

如果您想全部查看它们,可以查看其__dict__属性。