2

出于纯粹的好奇:是否有一种简单的方法(不超过两行代码)来访问函数的分配属性的字典/列表(从该函数内部)?

例如:

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()似乎可以解决问题,但是您必须过滤您的属性。如果您事先不知道属性名称,那会有些不便。

如果我可以分配一个属性,则必须..应该有一种从内部访问其目录的方法。

更新

在尝试访问属性之前,我完全忘记了实际调用/调用 = 实例化函数。... 我的错!- sry 和 thx 的答案 ;-)

自然我尝试了func.__dict__and dir(func),但是在这样做之前没有实例化函数对象......在我最初的测试中,我最初从函数内部定义了一个属性,然后没有调用该函数,而是尝试访问该函数- 来自外部范围的属性 - 自然失败了!

4

3 回答 3

5

你的意思是这样的,使用__dict__

In [11]: def foo():
   ....:     foo=1

In [12]: foo.bar=3

In [13]: foo.__dict__
Out[13]: {'bar': 3}
于 2012-11-05T15:08:28.650 回答
5

而不是 using ,我认为使用vars()func.__dict__看起来更好:

>>> def func():
...     pass
... 
>>> func.a = 19
>>> 
>>> func.__dict__
{'a': 19}
>>> vars(func)
{'a': 19}
>>> vars(func) is func.__dict__
True

更少的下划线。

于 2012-11-05T15:19:59.203 回答
4

给定函数名funcfunc.__dict__是函数的字典,其中包含直接分配给函数的所有属性。然后,您可以进行成员资格测试 ( if foo in func.__dict__),使用 迭代字典的键for,或使用其他字典方法。

于 2012-11-05T15:09:53.220 回答