Python,如何使用@in类方法

Python,如何使用@in类方法,python,Python,我尝试在class方法中使用@。像这样 class Dataset: @parse_func def get_next_batch(self): return self.generator.__next__() 解析函数如下所示: def parse_func(load_batch): def wrapper(**para): batch_files_path, batch_masks_path, batch_label = load_batch(**para)

我尝试在class方法中使用
@
。像这样

class Dataset:
  @parse_func
  def get_next_batch(self):
      return self.generator.__next__()
解析函数如下所示:

def parse_func(load_batch):
  def wrapper(**para):
    batch_files_path, batch_masks_path, batch_label = load_batch(**para)
    batch_images = []
    batch_masks = []
    for (file_path, mask_path) in zip(batch_files_path, batch_masks_path):
        image = cv2.imread(file_path)
        mask = cv2.imread(mask_path)
        batch_images.append(image)
        batch_masks.append(mask)
    return np.asarray(batch_images, np.float32), np.asarray(batch_masks, np.uint8), batch_label

  return wrapper
但是,当我调用
dataset.get\u next\u batch()
时,它将引发
异常,如下所示

回溯(最近一次呼叫最后一次): TypeError:wrapper()只接受0个参数(给定1个)

您知道为什么会出现此错误以及任何解决方案吗?多谢各位

只要改变就行了

def parse_func(load_batch):
  def wrapper(*para):
    batch_files_path, batch_masks_path, batch_label = load_batch(*para)
    batch_images = []
    batch_masks = []
    for (file_path, mask_path) in zip(batch_files_path, batch_masks_path):
        image = cv2.imread(file_path)
        mask = cv2.imread(mask_path)
        batch_images.append(image)
        batch_masks.append(mask)
    return np.asarray(batch_images, np.float32), np.asarray(batch_masks, np.uint8), batch_label

  return wrapper()
@
符号表示装饰功能。这里,它的意思是
parse\u func(获取下一批)
。因此,如果包装器使用关键字params(
**para
),您只想将一些参数传递给包装器,但实际上除了
self
参数之外,您不想传递其他参数。因此,这里我将参数替换为位置参数
*para

函数
包装器(**kwargs)
仅接受命名参数。但是,在实例方法中,
self
自动作为第一个位置参数传递。由于您的方法不接受位置参数,因此将失败


您可以编辑到
wrapper(self,**kwargs)
或更一般的
wrapper(*args,**kwargs)
。但是,您使用它的方式不清楚这些参数是什么。

尝试使用包装器(*args,**kwargs),当然也可以加载批处理(*args,**kwargs),但是这个装饰器在应用于该方法时毫无意义耶!很有效,非常感谢!