python - 类方法中带有验证装饰器的 TypeError
问题描述
我正在尝试在一个类中使用一个简单的验证装饰器:
import numpy as np
def validate_decorator(func):
def func_wrapper(value):
if value < 0:
raise Exception("Not valid!")
return func(value)
return func_wrapper
class MyClass:
def __init__(self):
self.my_array = np.zeros(shape=(10,))
self.idx = 0
@validate_decorator
def insert_value(self, value):
self.my_array[self.idx] = value
self.idx += 1
def __str__(self):
return f"{self.my_array[:self.idx]}"
a = MyClass()
a.insert_value(3.14)
这给
TypeError: func_wrapper() 接受 1 个位置参数,但给出了 2 个
我不明白这个错误。
如果我将 修改func_wrapper
为也接受一个self
参数 and return self
(而不是func(value)
),那么没有TypeError
,但正如预期的那样,insert_value
不会执行。
有人可以帮助我了解如何在我的课堂上使用这个简单的装饰器吗?
解决方案
我添加了self
参数func_wrapper
并将func_wrapper
' 的返回值更改为func(self, value)
. 它现在有效,insert_value
已执行。
self
除非转换为类方法或静态方法,否则类实例方法始终具有此必需属性: Python 中“self”一词的用途是什么?
import numpy as np
def validate_decorator(func):
def func_wrapper(self, value):
if value < 0:
raise Exception("Not valid!")
return func(self, value)
return func_wrapper
class MyClass:
def __init__(self):
self.my_array = np.zeros(shape=(10,))
self.idx = 0
@validate_decorator
def insert_value(self, value):
self.my_array[self.idx] = value
self.idx += 1
print('EXECUTED!')
def __str__(self):
return f"{self.my_array[:self.idx]}"
a = MyClass()
a.insert_value(3.14)
推荐阅读
- python - Python 菜单上的 exit()、条件、返回或中断?
- javascript - 成功登录后仍继续加载 index.php
- javascript - 如何从在 ASP.NET CORE MVC 中使用 @Html.DropDownListFor 标记助手的下拉按钮中获取值
- android - 短信接收器在一段时间后停止工作
- aws-lambda - Vercel/NextJS:如何在本地开发期间从前端访问无服务器功能?
- javascript - 返回排序后的数组 React
- c# - 在 asp.net 核心中单击按钮时隐藏和显示文本
- python-3.x - 我无法使用 bs4 提取帖子的 instagram 主题标签
- javascript - 在 Vue.js 中从数据库显示图像到浏览器
- spring-boot - 当容器中的应用程序崩溃/失败时如何对 dockerfile 进行故障排除?