python - 如何使用类方法的装饰器
问题描述
我在设计一个类的时候,写了一个类成员函数作为装饰器
def switchWindow(self, win: str):
def actual_decorator(func):
self.browser.switch_to.window(self.windowsHandles[win])
def inner():
func()
return inner
return actual_decorator
装饰器用于在其他成员函数运行之前更改它们的环境,但是,当我在这样的成员函数上使用装饰器时:
@switchWindow(win="crop")
def test_cropFunction(self):
pass
IDE 引发如下错误:
@switchWindow(win="crop") TypeError: switchWindow() missing 1 required positional argument: 'self'
我对这个错误感到困惑,但后来我通过在装饰器之前添加一个“自我”来重写装饰器,但这也是错误的:
@self.switchWindow(win="crop") NameError: name 'self' is not defined
谁能帮我吗?
解决方案
我将装饰器函数移出类,并进行如下更改:
def switchWindow(win: str):
def actual_decorator(func):
print(win)
def inner(self):
self.browser.switch_to.window(self.windowsHandles[win])
func(self)
return inner
return actual_decorator
现在它可以工作了!
推荐阅读
- javascript - 如何使用 fs 向我的 JSON 文件添加更多值?
- javascript - 在终端指挥官 cli 中绘制图表
- python - 大括号内的格式字符串替换为一个大括号
- swift - 如何将@AppStorage 用于字符串字典 [String: String]
- javascript - 我可以使用 CSS 或 JavaScript 在新的全尺寸窗口中打开缩略图吗?
- xamarin.android - 停止运行程序,因为 WebView
- flutter - tflite颤动中detectObjectOnImage和runModelonImage的区别
- flask - (Flask) WTForm 以错误的值呈现
- php - Symfony 5.1 - 无法自动装配服务
- node.js - 使用 Typescript 和 Node 在 CLI 中克隆 git 存储库