python的函数属性:获取所有已分配属性的列表/字典

Don*_*ion 2 python

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

例如:

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?'
Run Code Online (Sandbox Code Playgroud)

由于函数是可调用对象,因此可以为它们提供属性,但似乎没有办法以简单的方式访问这些属性的列表.

locals()globals()没有帮助. dir()似乎可以做到这一点,但你必须过滤你的属性.如果您事先不知道属性名称,这有点不方便.

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

更新:

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

当然,我试过func.__dict__dir(func),但只是在这样做之前没有实例函数对象......和我原来的测试,我最初从函数中定义的属性,那么没有调用函数,而是试图访问功能 - 来自外部范围的属性 - 自然失败了!

Ash*_*ary 5

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

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

In [12]: foo.bar=3

In [13]: foo.__dict__
Out[13]: {'bar': 3}
Run Code Online (Sandbox Code Playgroud)


DSM*_*DSM 5

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

>>> def func():
...     pass
... 
>>> func.a = 19
>>> 
>>> func.__dict__
{'a': 19}
>>> vars(func)
{'a': 19}
>>> vars(func) is func.__dict__
True
Run Code Online (Sandbox Code Playgroud)

更少的下划线.