我想用一個裝飾做一些準備工作,並記錄狀態的功能也有,所以我寫類似的東西:類作爲裝飾類方法
class Decorator:
def __init__(self, func):
self.count = 0
self.func = func
def __call__(self, *args, **kwargs):
self.count += 1 # Simply count the call times
return self.func(self, *args, **kwargs)
class Foo:
def __init__(self):
self.value = 0
@Decorator
def test(self, value):
self.value = value # change the value of instance
print(self.value)
f = Foo()
f.test(1)
print(f.value)
print(f.test.value)
但很明顯,self
在__call__(self, *args, **kwargs)
對應例如Decorator
而不是Foo
的實例,這將使f.value
不變,但是f.test.value
增加。
有沒有什麼辦法可以將Foo
的實例傳遞給Decorator
而不是Decorator
本身?
還是有什麼辦法可以更清楚的實現這個功能嗎?
謝謝先進。
什麼f.test.value辦? –
我200%確定我沒有完全理解你的問題。就像在你的代碼中一樣,你想記錄一次調用@Decorator的方法的次數。這很好,但你以後如何訪問** count **。我試過一個例子,你可以將** Foo **的實例傳遞給** Decorator **,但是f.test.value不起作用 –
你可以使用'f.test.count'訪問count,其中'f '是'Foo'的一個實例。 – Leon