吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1357|回复: 12
收起左侧

[已解决] Python装饰器

 关闭 [复制链接]
沉默的菜鸟 发表于 2020-5-1 11:02
本帖最后由 沉默的菜鸟 于 2020-5-1 13:08 编辑

编写一个Python类时,在其中编写了一个成员函数作为装饰器

TIM截图20200501105738.png


该装饰器用于在其他函数执行前切换好环境,当我给其他成员函数装上这个装饰后运行时就报错了:

TIM截图20200501110020.png


TIM截图20200501110028.png


有点搞不懂为啥报错说装饰器缺少self参数,这个参数难道不是对象自带的嘛?要显式填上去?显示填上去也不对呀

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

assdqwe123 发表于 2020-5-1 12:52
楼主可以试试,把装饰器放在类外面
[Python] 纯文本查看 复制代码
def switchWindow(win: str):
    def actual_decorator(func):
        def inner(self):
            self.browser.switch_to.window(self.windowsHandles[win])
            func(self)
        return inner
    return actual_decorator

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
沉默的菜鸟 + 1 + 1 谢谢@Thanks!

查看全部评分

rsnodame 发表于 2020-5-1 11:12
报错信息已经提示你了,缺参数【self】
所以把
@switchWindow(win="crop")
改成
@self.switchWindow(win="crop")
即可
 楼主| 沉默的菜鸟 发表于 2020-5-1 11:19
rsnodame 发表于 2020-5-1 11:12
报错信息已经提示你了,缺参数【self】
所以把
@switchWindow(win="crop")

    @self.switchWindow(win="crop")
NameError: name 'self' is not defined
结发受长生 发表于 2020-5-1 11:21
看不懂啊看不懂
zzyzgy 发表于 2020-5-1 11:21
跟着学习了。
huyifan311 发表于 2020-5-1 11:49
给楼主点赞
52小柯柯 发表于 2020-5-1 11:58
我感觉你在你在你在无中生有暗度陈仓,建议复习一下装饰器传参方式,假如你被装饰的函数能传参,你第一次用self的时候都没鸟它能得到参数吗?装饰器也不给人家传,人家哪里去找self嘛
 楼主| 沉默的菜鸟 发表于 2020-5-1 12:21
52小柯柯 发表于 2020-5-1 11:58
我感觉你在你在你在无中生有暗度陈仓,建议复习一下装饰器传参方式,假如你被装饰的函数能传参,你第一次用 ...

不太懂,你的意思是
            self.browser.switch_to.window(self.windowsHandles[win])
这句话应该放在inner里面??
rsnodame 发表于 2020-5-1 12:32
沉默的菜鸟 发表于 2020-5-1 11:19
@self.switchWindow(win="crop")
NameError: name 'self' is not defined

尴尬了……经楼上的大佬提醒,发现我之前的解释不对。你写的装饰器似乎从结构上就有问题。最明显的,func代表未来要被装饰的函数,应该在switchWindow()这一层就要作为参数放进去。你放在了actual_decorator(),等于无中生有了。另外执行func的语句似乎也有问题。建议你网上再仔细看一下装饰器的要点
 楼主| 沉默的菜鸟 发表于 2020-5-1 12:33
本帖最后由 沉默的菜鸟 于 2020-5-1 12:39 编辑
52小柯柯 发表于 2020-5-1 11:58
我感觉你在你在你在无中生有暗度陈仓,建议复习一下装饰器传参方式,假如你被装饰的函数能传参,你第一次用 ...

image.png
我是仿造如上的写法写的,最外层的接受装饰器参数,第二层接受待执行的函数参数,第三层再去执行这个函数
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 17:27

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表