我有一个类
Alpha
,它有方法__A
和方法__B
。它们都在类 __init__
范围内或其他 Alpha
方法中调用,因此在 __
下使用 double__under ,并且它们都在 Alpha
属性上起作用。
如何制作另一个 wrapper 方法
__C
作为装饰器来扩展 __A
功能并在 __B
执行之前和之后应用 __A
。
代码:
class Alpha:
def __init__(self, a, b) -> None:
self.a = a
self.b = b
self.run_me()
# partial(self.__C, self=self)
#@staticmethod
def __C(self, func):
def wrapper(*args, **kwargs):
# self: Alpha
self.__B()
func(*args, **kwargs)
self.__B()
return wrapper
def __B(self):
self.b +=5
print('Method B ran')
@__C
def __A(self):
self.a += 1
print('Method A ran')
def run_me(self):
self.__A()
alpha = Alpha(1,5)
评论是我尝试过的一些想法,但我认为我做错了。
如何应用?我的实现有什么问题吗?
注意:我知道我可以手动重写
__A
,但在这个例子中,__A
代表了很多需要用__B
功能来扩展的方法。预先感谢。
要使
__C
作为方法的装饰器,应将其定义为静态方法,其中包含包装函数,并以 self
作为位置参数,以便它可以调用绑定到 __B
的方法
self
实例:
@staticmethod
def __C(func):
def wrapper(self, *args, **kwargs):
self.__B()
func(self, *args, **kwargs)
self.__B()
return wrapper
演示这里