我有一個奇怪的行爲造成的錯誤。我可能從根本上忽略了關於函數屬性的語義。或者它可能是一個錯誤。我在有人可以解釋方法屬性上的Python hasattr/delattr嗎?
$ python
Python 2.7.1+ (r271:86832, Apr 11 2011, 18:13:53)
[GCC 4.5.2] on linux2
首先我定義一個類,併爲它的一個方法添加一個屬性。現在
>>> class Foo(object):
... def bar(self):
... pass
... bar.xyzzy = 'magic'
...
我可以看到存在於Foo.bar
>>> hasattr(Foo.bar, 'xyzzy')
True
而且我可以找回。
>>> Foo.bar.xyzzy
'magic'
>>> getattr(Foo.bar, 'xyzzy')
'magic'
但我無法刪除它。
>>> del Foo.bar.xyzzy
Traceback (most recent call last):
...
AttributeError: 'instancemethod' object has no attribute 'xyzzy'
>>> delattr(Foo.bar, 'xyzzy')
Traceback (most recent call last):
...
AttributeError: 'instancemethod' object has no attribute 'xyzzy'
任何想法爲什麼?我認爲這與Foo.bar
在此處被報告爲「實例方法」這一事實有關,而不是如果您只是詢問Foo.bar
是什麼的未綁定方法。但我不確定這是否是預期的副作用,如果我誤解了某些內容,或者是否有錯誤。
完美,感謝您的解決方案。 – Ian