我不完全確定如何表達標題。沒有意義的話就改吧。。
我最近遇到了方法鏈,我真的很喜歡用它來完成一些任務。
然后我注意到我在每個方法的末尾都呼叫了一個特定的方法,我在想一旦到達鏈的末尾是否可以強制執行這個方法?
事實上,不管鏈接如何,只用普通的類方法就可以做這樣的事情嗎?
例如:
class Alphabet:
def _use_me(self):
pass
def a(self):
# do some stuff
self._use_me()
return self
def b(self):
# do some stuff
self._use_me()
return self
def c(self):
# do some stuff
self._use_me()
return self
self._use_me()我想知道,如果可以self._use_me()默認運行,而不是在每個呼叫方法的末尾?
也許我什至認為它是錯誤的,應該改變實作?歡迎提出建議。
我找不到任何關于此的資訊 - 但這可能只是由于缺乏知識并且沒有在 Google 上使用正確的搜索引數。
uj5u.com熱心網友回復:
背景關系管理器浮現在腦海中:
class Alphabet:
def __init__(self):
return
def __enter__(self):
return self
def __exit__(self, type, value, traceback):
self._use_me()
print('exit')
def _use_me(self):
print('calling _use_me')
def a(self):
print('a')
def b(self):
print('b')
def c(self):
print('c')
# calling it:
with Alphabet() as a:
a.a()
uj5u.com熱心網友回復:
是的,您可以使用裝飾器來實作此功能。裝飾任何/所有功能的裝飾器。
試試這個代碼:
def use_me(func):
def wrapper(self):
# Do some stuff, before the function
func(self)
# Do some stuff, after the function
print("called use_me")
return wrapper
class Alphabet:
@use_me
def a(self):
# do some stuff
print('calling A')
@use_me
def b(self):
# do some stuff
print('calling B')
return self
@use_me
def c(self):
# do some stuff
print('calling B')
return self
這是它的作業原理:
a = Alphabet()
a.a()
# calling A
# called use_me
a.b()
# calling B
# called use_me
a.c()
# calling C
# called use_me
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/449019.html
標籤:Python python-3.x 方法链
