Python,如何使用@in类方法
我尝试在class方法中使用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 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),但是这个装饰器在应用于该方法时毫无意义耶!很有效,非常感谢!