使用 .__wrapped__ 测试未修饰的函数给出错误 "requires 1 more positional argument"
testing undecorated function with .__wrapped__ gives error "requires 1 more positional argument"
我在论坛上找过这个,但我能找到任何精确处理包裹的 functool 的东西......
我有一个 class 函数 copyfile 和 decorator fileprocessing 定义为:
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' “
所以我想这与如何处理复制文件参数中的“自我”有关,但我不知道从哪里开始理解什么.__wrapped__ 做错了
我试图在论坛上查看,但我得到的只是如何取消修饰函数(使用 ._wrapped_ ),如何在正常情况下处理自我。
我不知道如何处理这个错误以及使用哪些对象或方法来调查
So i guess this has something to do with how to handle "self" in the copyfile arguments, but i dont know where to begin with to understand what .__wrapped__
is doing wrong
你完全正确。
.__wrapped__
属性在这里是一个(未绑定的)函数(不是方法)
print(sync.copyfile.__wrapped__)
# prints <function Sync.copyfile ...>,
# not <bound method Sync.copyfile of <__main__.Sync object ...>
因此需要明确提供一个“self”参数,例如:
# Change
sync.copyfile.__wrapped__('source_folder', 'dest_folder', f'{file}.txt')
# to ↓↓↓↓
sync.copyfile.__wrapped__(sync, 'source_folder', 'dest_folder', f'{file}.txt')
我在论坛上找过这个,但我能找到任何精确处理包裹的 functool 的东西...... 我有一个 class 函数 copyfile 和 decorator fileprocessing 定义为:
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' “
所以我想这与如何处理复制文件参数中的“自我”有关,但我不知道从哪里开始理解什么.__wrapped__ 做错了
我试图在论坛上查看,但我得到的只是如何取消修饰函数(使用 ._wrapped_ ),如何在正常情况下处理自我。
我不知道如何处理这个错误以及使用哪些对象或方法来调查
So i guess this has something to do with how to handle "self" in the copyfile arguments, but i dont know where to begin with to understand what
.__wrapped__
is doing wrong
你完全正确。
.__wrapped__
属性在这里是一个(未绑定的)函数(不是方法)
print(sync.copyfile.__wrapped__)
# prints <function Sync.copyfile ...>,
# not <bound method Sync.copyfile of <__main__.Sync object ...>
因此需要明确提供一个“self”参数,例如:
# Change
sync.copyfile.__wrapped__('source_folder', 'dest_folder', f'{file}.txt')
# to ↓↓↓↓
sync.copyfile.__wrapped__(sync, 'source_folder', 'dest_folder', f'{file}.txt')