使用python 3.6。我試圖編寫一些代碼,允許我在類方法上放置一個唯一的標識符。Python更改方法的名稱
下面是一個例子:
def test(func):
def wrap():
pass
wrap.__name__ += '_TEST'
return wrap
class example:
@test
def method(self):pass
控制檯:
import inspect
Bar = example()
inspect.getmembers(Bar, predicate=inspect.ismethod)
Out[3]:
[('method', # Name didn't change
<bound method test.<locals>.wrap of <__main__.example object at
0x000002670E073EF0>>)]
Bar.method.__name__
Out[4]: 'wrap_TEST'
我希望能夠遍歷一個類的方法,只執行我已經打上我的裝飾的人。這可以做到嗎?
查找方法不返回實際的功能恢復,他們本身就是一個瘦包裝過的功能。如果您檢查:Bar.method .__ func __.__ name_',則您的實際功能已重命名。 –
你能解釋一下裝飾者試圖達到什麼嗎?看起來這樣做太複雜了。裝飾器是否真的改變了函數的行爲或只改變名稱? – MSeifert
這也是由於['gemembers()'工作](https://github.com/python/cpython/blob/3.6/Lib/inspect.py#L326),它使用'dir()'獲取成員,並且將始終返回'method',因爲這是實例或類字典中存在的。 –