不知道爲什麼你會永遠這樣做,但是......
A.fA實際上是一個完全獨立的對象VS的官能團FA。觀察:
>>> class A(object):
... def fA(self): pass
... print fA
...
<function fA at 0x10f1c2a28>
>>> A.fA
<unbound method A.fA>
正如你所看到的,A.fA是一個「未綁定的方法」,而不是一個函數。 「不受限制」意味着它不與任何實例相關聯;而綁定方法綁定到特定實例。注意:
>>> A().fA
<bound method A.fA of <__main__.A object at 0x10f1d3d10>>
無論哪種方式,方法包裝實現它們的功能:
>>> A.fA.im_func
<function fA at 0x10f1c2a28>
注意,地址是一樣的一個早期的印刷。
奇怪的是,我不能瑞普你看到的行爲:
>>> 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.
>>>
PS:A.fA.x似乎爲我工作一樣好A.fA.im_func.x,這讓我吃驚......再一次,我有點懷疑,爲什麼你正在考慮這樣做。通常,只有當您使用__dict__
時,如果您正在執行__getattr__
(不要與__getattribute__
混淆)。
給予對象(尤其是基本類型的)特設屬性也是一個不錯的主意。通常可行的替代方案是使用自己的地圖,例如
>>> def foo(): pass
...
>>> my_x_values = {foo: 'X'}
>>> my_x_values[foo]
'X'
不是每個人都對此表示贊同。看看這個其他SO問題:Python function attributes - uses and abuses
您正試圖在類定義中的方法添加屬性? – jdi 2012-07-29 22:00:50
爲什麼你要這個? – geoffspear 2012-07-29 22:01:10
我想這是因爲它是一個Python功能。 在開始時我做了類似的事情,當我希望派生類設置其方法之一的屬性時。 我需要正確的答案。 – jimifiki 2012-07-29 22:04:11