Python Wrapper/Decorator
Python Wrapper/Decorator
我想弄清楚 wrappers/decorators。
为此,我想创建一个简单的包装器,用于创建函数中不存在的目录:
import os
def _create_folder(func):
def wrapper(directory):
if not os.path.exists(os.path.dirname(directory)):
os.makedirs(os.path.dirname(directory))
func(directory)
return wrapper
@_create_folder
def print_dir(directory):
print(directory)
path = "C:/Temp"
print_dir(path)
我没有错误,但是没有创建文件夹。我错过了什么?
此外,最后,将被包装的函数在 class:
import os
def _create_folder(func):
def wrapper(directory):
if not os.path.exists(os.path.dirname(directory)):
os.makedirs(os.path.dirname(directory))
func(directory)
return wrapper
class Test():
@_create_folder
def print_dir(self, directory):
print(directory)
path = "C:/Temp"
test = Test().print_dir(path)
在那种情况下,我有以下错误:
TypeError: wrapper() takes 1 positional argument but 2 were given
如何让它在 class 中工作?
在第一个代码中,您应该在路径的最后添加'/'。
path="C:/Temp/"
os.path.dirname()函数可以使用'/'或'\'识别某个单词是否是文件夹。
因此,在您的代码中,os.path.dirname() 函数仅 returns "C:".
对于class,我只需要在装饰器中处理“self”:
def create_folder(func):
def wrapper(self, directory):
if not os.path.exists(os.path.dirname(directory)):
os.makedirs(os.path.dirname(directory))
func(self, directory)
return wrapper
class Test():
@create_folder
def print_dir(self, directory):
print(directory)
path = "C:/Temp/"
test = Test().print_dir(path)
我想弄清楚 wrappers/decorators。
为此,我想创建一个简单的包装器,用于创建函数中不存在的目录:
import os
def _create_folder(func):
def wrapper(directory):
if not os.path.exists(os.path.dirname(directory)):
os.makedirs(os.path.dirname(directory))
func(directory)
return wrapper
@_create_folder
def print_dir(directory):
print(directory)
path = "C:/Temp"
print_dir(path)
我没有错误,但是没有创建文件夹。我错过了什么?
此外,最后,将被包装的函数在 class:
import os
def _create_folder(func):
def wrapper(directory):
if not os.path.exists(os.path.dirname(directory)):
os.makedirs(os.path.dirname(directory))
func(directory)
return wrapper
class Test():
@_create_folder
def print_dir(self, directory):
print(directory)
path = "C:/Temp"
test = Test().print_dir(path)
在那种情况下,我有以下错误:
TypeError: wrapper() takes 1 positional argument but 2 were given
如何让它在 class 中工作?
在第一个代码中,您应该在路径的最后添加'/'。
path="C:/Temp/"
os.path.dirname()函数可以使用'/'或'\'识别某个单词是否是文件夹。
因此,在您的代码中,os.path.dirname() 函数仅 returns "C:".
对于class,我只需要在装饰器中处理“self”:
def create_folder(func):
def wrapper(self, directory):
if not os.path.exists(os.path.dirname(directory)):
os.makedirs(os.path.dirname(directory))
func(self, directory)
return wrapper
class Test():
@create_folder
def print_dir(self, directory):
print(directory)
path = "C:/Temp/"
test = Test().print_dir(path)