使用 .__wrapped__ 测试未修饰的函数会给出错误"requires 1 more positional argument"



我在论坛上找过这个,但我能找到任何精确处理functool包装的东西。。。

我有一个类,它有一个函数copyfile和一个decorator文件处理,定义为:

class Sync():
...
def fileprocessing(func):
"decorator for copyfile methods"
@functools.wraps(func)
def wrapped_f(*args):
...#some code invoking copyfile
return wrapped_f
@fileprocessing
def copyfile(self,src, dst, file):
"try copying with shutil file in src folder to dst folder, otherwise with python"
try:
shutil.copy2(f'{src}/{file}',f'{dst}/{file}', follow_symlinks=False)
except Exception as err:
print(err)
self.pythoncopyfile(f'{src}/{file}',f'{dst}/{file}')

我正在尝试用pytest测试这个函数,当它被装饰时,它可以很好地工作。但是,我想测试未修饰的函数。

我放入了我的test_file.py:

def test_undecorated_copyfile():
sync=Sync()
for file in range(3):  
sync.copyfile.__wrapped__('source_folder', 'dest_folder', f'{file}.txt')

当我运行pytest时,它会让我">TypeError:copyfile((缺少1个必需的位置参数:"file">

所以我想这与如何处理";自我;在copyfile的争论中,但我不知道从哪里开始了解什么__wrapped___正在执行错误的

我试着在论坛上查看,但我得到的只是如何取消装饰一个函数(用._包装_(,如何在正常情况下处理自己
我不知道如何处理这个错误,也不知道使用哪些对象或方法来调查

所以我想这与如何处理"自我;在copyfile参数中,但我不知道从哪里开始了解.__wrapped__在中做了什么错误

你说得很对。

.__wrapped__属性在这里是一个(未绑定的(函数(而不是方法(

print(sync.copyfile.__wrapped__)
#  prints <function Sync.copyfile ...>, 
#  not    <bound method Sync.copyfile of <__main__.Sync object ...>

因此需要一个";自我;显式提供的参数,例如:

# Change
sync.copyfile.__wrapped__('source_folder', 'dest_folder', f'{file}.txt')
# to                      ↓↓↓↓
sync.copyfile.__wrapped__(sync, 'source_folder', 'dest_folder', f'{file}.txt')

相关内容

  • 没有找到相关文章

最新更新