究竟函数的__dict__是干什么用的呢?
其实它提供给函数增加属性的功能
比如还是那个简单的例子:
In [4]: def add(x,y):
...: return x+y
...:
显是一下这个函数的属性:
In [13]: print dir(add)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name']
那么我们现在来给这个函数增加一个属性:
In [14]: def mul(x,y):
....: return x*y
....:
In [15]: add.__dict__['mul']=mul
我们再来看一下add的属性列表
In [16]: print dir(add)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globals__', '__hash__',
'__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name', 'mul']
发现已经多了一个属性mul
而且和我们定义的函数一样是可以调用的
In [17]: add.mul(10,20)
Out[17]: 200