出于纯粹的好奇:是否有一种简单的方法(不超过两行代码)来访问一个函数的指定属性的字典/列表(在该函数中)?
例如:
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=实例化函数。..。我的错!-为答案而努力;-)
当然,我尝试了func.__dict__和dir(func),但是在这样做之前没有实例化函数对象.在我最初的测试中,我最初从函数内部定义了一个属性,然后没有调用函数,而是尝试从外部范围访问函数--属性--当然失败了!
发布于 2012-11-05 15:19:59
与其使用func.__dict__,我认为使用瓦尔斯()看起来更好
>>> def func():
... pass
...
>>> func.a = 19
>>>
>>> func.__dict__
{'a': 19}
>>> vars(func)
{'a': 19}
>>> vars(func) is func.__dict__
True更少的下划线。
发布于 2012-11-05 15:08:28
您的意思是这样的,使用__dict__
In [11]: def foo():
....: foo=1
In [12]: foo.bar=3
In [13]: foo.__dict__
Out[13]: {'bar': 3}发布于 2012-11-05 15:09:53
给定函数名func,func.__dict__是函数的字典,它包含直接分配给函数的所有属性。然后,您可以进行成员资格测试(if foo in func.__dict__),使用for迭代字典的键,或者使用其他字典方法。
https://stackoverflow.com/questions/13234792
复制相似问题