我正在編寫一個方法裝飾器並需要訪問定義當前裝飾方法的類。獲取包含類的方法
問題似乎是這樣的,用Python 3中的方法只是函數,除非類被實例化。
有沒有辦法解決這個問題?我真的不想要擺弄__qualname__
...
In [29]: class A:
....: def B(self):
....: pass
....:
In [30]: A.B.__qualname__
Out[30]: 'A.B'
# This is what I want:
>>> get_class(A.B)
A
爲什麼不創建類裝飾器呢?在課堂中裝飾功能時,*課程尚未創建*。 –
@MartijnPieters,因爲裝飾器相對於包含類*更改裝飾方法*的語義。 '@decorate(「some_method」)\ nclass Foo:...'似乎非常直觀。如果沒有其他選擇,我會創建一個自定義的基類或元類,並檢查其中所有方法的屬性。或類似的東西。 – dom0
@ Michael0x2a:不,這不是一個正確的副本。方法上的函數裝飾器無法確定類* yet *,因爲在定義了所有函數之前沒有類對象。 –