gpt4 book ai didi

python - 使用装饰器停用功能

转载 作者:太空狗 更新时间:2023-10-30 01:41:35 24 4
gpt4 key购买 nike

是否可以使用 python 装饰器“停用”一个函数?这里有一个例子:

cond = False

class C:

if cond:
def x(self): print "hi"

def y(self): print "ho"

是否可以像这样用装饰器重写这段代码?:

class C:

@cond
def x(self): print "hi"

def y(self): print "ho"

背景:在我们的库中有一些依赖项(如 matplotlib)是可选的,并且只有少数功能(用于调试或前端)需要这些。这意味着在某些系统上 matplotlib 没有安装在其他系统上,但两者都应该运行(核心)代码。因此,如果未安装 matplotlib,我想禁用某些功能。有这么优雅的方式吗?

最佳答案

您可以使用装饰器将函数变成无操作(记录警告):

def conditional(cond, warning=None):
def noop_decorator(func):
return func # pass through

def neutered_function(func):
def neutered(*args, **kw):
if warning:
log.warn(warning)
return
return neutered

return noop_decorator if cond else neutered_function

这里 conditional 是一个装饰工厂。它根据条件返回两个装饰器之一。

一个装饰器只是让函数保持不变。另一个装饰器完全替换了被装饰的函数,而是发出警告。

使用:

@conditional('matplotlib' in sys.modules, 'Please install matplotlib')
def foo(self, bar):
pass

关于python - 使用装饰器停用功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17946024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com