假设我有一些名为 TheClass 的导入类和一个方法 sth(arg)。
我有什么:
var = TheClass()
var.sth('blah')
我想要的是什么:
var = TheClass()
var.wrapped_sth()
其中wrapped_sth类似于:
def wrapped_sth():
sth('blah')
我已经知道它应该用装饰器来完成,但是我已经找到的所有例子都是你可以访问 TheClass 实现的情况,我没有这种情况,我没有想要覆盖。
希望描述清楚。你能救我吗?
答案 0 :(得分:3)
我的建议是扩展TheClass
以包装函数。
class MyClass(TheClass):
def wrapped_sth(self):
return self.sth('blah')
现在您可以创建var = MyClass()
,并根据需要致电var.wrapped_sth()
,MyClass
将继承TheClass
中的所有功能。
答案 1 :(得分:2)
您错误地对装饰器进行编码,以纠正错误:
def decorator_sth(func):
def wrapper():
return func('blah')
return wrapper
现在使用decorator_sth
包装方法:
var.sth = decorator(var.sth) # this call returns wrapper
decorator_sth
接受一个函数并返回一个包装函数。 func
是装饰函数,wrapper
是包装函数。 wrapper
函数从func
的本地范围保留封闭范围中的decorator_sth
。
这是一个典型的装饰者;它将函数或可调用对象作为参数,并返回可调用本身或其周围的包装器对象。