获取调用对象的初始化的参数

2024-04-18 21:58:55 发布

您现在位置:Python中文网/ 问答频道 /正文

在Python2.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=('',))

Tags: 对象方法importselfhelloinitargskwargs
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为什么这种简化在实践中不是很有用。你知道吗

可以将它们存储为属性。你知道吗

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__属性。你知道吗

相关问题 更多 >