强制特定方法运行
Force run of specific method
我不太确定如何用标题来表达。看不懂就改..
我最近遇到了方法链,我非常喜欢用它来完成一些任务。
然后我注意到我在每个方法的末尾调用一个特定的方法,我在想是否有可能在到达链的末尾时强制执行此方法?
事实上,不管链接如何,只用普通的 class 方法是否可以做这样的事情?
例如:
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 上使用正确的搜索参数。
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()
是的,您可以使用装饰器实现此功能。用于装饰 any/all 函数的装饰器。
试试这个代码:
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
我不太确定如何用标题来表达。看不懂就改..
我最近遇到了方法链,我非常喜欢用它来完成一些任务。
然后我注意到我在每个方法的末尾调用一个特定的方法,我在想是否有可能在到达链的末尾时强制执行此方法?
事实上,不管链接如何,只用普通的 class 方法是否可以做这样的事情?
例如:
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 上使用正确的搜索参数。
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()
是的,您可以使用装饰器实现此功能。用于装饰 any/all 函数的装饰器。
试试这个代码:
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