出于纯粹的好奇心:是否有一种简单的方法(不超过两行代码)来访问函数的指定属性的字典/列表(从该函数中)?
e.g:
def func(*args):
print("# of arguments = {0} ".format(len(args))) # normal arguments
print("# of attributes = {0}".format(len(func_attrs))) # function-attributes
func()
func.func_attr_1 = 'How do i get all attributes from within the associated function?'
func.func_attr_2 = 'How do i get all attributes from within the associated function?'
由于函数是可调用对象,因此可以为它们提供属性,但是 似乎没有办法以简单的方式访问这些属性的列表。
locals()
和globals()
没有帮助。
dir()
似乎可以解决问题,但你必须过滤你的属性。如果您事先不知道属性名称,那就太不方便了。
如果我可以分配一个属性,那么必须......应该是一种从内部访问其目录的方法。
更新:
我完全忘记在尝试访问属性之前实际调用/ invoke =实例化该函数。 ... 我的错! - sry和thx的答案; - )
自然我尝试了func.__dict__
和dir(func)
,但是在这样做之前没有实例化函数对象...而在我原来的测试中我最初在函数内定义了一个属性,然后没有调用该函数,但试图从外部范围访问函数属性 - 这自然失败了!
答案 0 :(得分:5)
你的意思是这样的,使用__dict__
:
In [11]: def foo():
....: foo=1
In [12]: foo.bar=3
In [13]: foo.__dict__
Out[13]: {'bar': 3}
答案 1 :(得分:5)
我认为使用vars()看起来更好看,而不是使用func.__dict__
:
>>> def func():
... pass
...
>>> func.a = 19
>>>
>>> func.__dict__
{'a': 19}
>>> vars(func)
{'a': 19}
>>> vars(func) is func.__dict__
True
更少的下划线。
答案 2 :(得分:4)
给定函数名func
,func.__dict__
是函数的字典,其中包含直接在函数上分配的所有属性。然后,您可以进行成员资格测试(if foo in func.__dict__
),使用for
迭代字典的键,或使用其他字典方法。