不知道你为什么要这么做,但是。。。在
与函数fA相比,A.fA实际上是一个完全独立的对象。观察:>>> class A(object):
... def fA(self): pass
... print fA
...
>>> A.fA
如您所见,A.fA是一个“未绑定的方法”,而不是一个函数Unbound”表示它不与任何实例相关联;而绑定方法绑定到特定实例。注意:
^{pr2}$
不管怎样,方法都会包装实现它们的函数:
^{3}$
请注意,该地址与前面打印的地址相同。在
奇怪的是,我无法对你看到的行为进行反驳:>>> A.fA.__dict__['x'] = 1
>>> A.fA.x
1
也许,这种差异是由于python的不同版本造成的。这是我的:$ python
Python 2.7.2 (default, Jun 20 2012, 16:23:33)
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
附言:A.fA.x似乎对我和A一样有效。fA.im_nc功能.x,这让我很惊讶。。。再说一次,我有点怀疑你为什么要这么做。通常,只有在实现__dict__时才使用__getattr__(不要与__getattribute__混淆)。在
给对象(尤其是基本类型的对象)赋予即席属性也是很少见的。另一种通常可行的方法是使用你自己的地图>>> def foo(): pass
...
>>> my_x_values = {foo: 'X'}
>>> my_x_values[foo]
'X'