有没有办法在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=('',))
答案 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__
属性。