- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
虽然我知道您不能在装饰器中直接引用 self
,但我想知道从 args[0]< 中提取它是否是一种不好的做法
。我的直觉是,但我想确定。
更具体地说,我正在开发网络服务的 API。大约一半的命令需要传递一个 token ,稍后可以使用该 token 来撤消它。我想要的是使该标记成为一个可选参数,如果没有提供,则生成一个。生成 token 需要对服务器进行经过身份验证的调用,服务器需要来自对象的数据。
虽然我知道我可以做到:
def some_command(self, ..., undo_token = None):
if undo_token = None:
undo_token = self.get_undo_token()
...
return fnord
我觉得可能有比在十几个方法中使用相同代码更好的方法。我的想法是写一个装饰器:
@decorator
def undoable(fn, *args, **kwargs):
if 'undo_token' not in kwargs:
kwargs['undo_token'] = args[0].get_undo_token()
return (fn(*args, **kwargs), kwargs['undo_token'])
所以我可以写得更干净
@undoable
def some_command(self, ...):
...
return foo
@undoable
def some_other_command(self, ...):
...
return bar
我是否让自己陷入困境?
最佳答案
我不明白你在为 undoable
编码什么——装饰器通常不是这样编码的,我不知道 @decorator
会从哪里来来自(是否有 from youforgottotelluswhence import decorator
或更邪恶的东西?看看为什么我不能忍受使用 from
来构建“人工裸名”而不是使用 nice 装饰 名字?-).
使用正常的装饰器编码,例如......:
import functools
def undoable(f):
@functools.wraps(f)
def wrapper(self, *a, **k):
tok = k.get('undo_token')
if tok is None:
tok = k['undo_token'] = self.get_undo_token()
return f(self, *a, **k), tok
return wrapper
命名包装器的第一个强制位置参数 self
绝对没有问题,使用它比使用可读性较差的 args[0]
更清晰。
关于python - 在装饰器中使用 self 是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3631768/
如果您想分享更多信息,可以在这里找到整个资源 指针: https://github.com/sergiotapia/DreamInCode.Net 基本上,我的API将为其他开发人员提供
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 5 年前。 Improve this qu
我不是 SCM 工具的经验丰富的用户,尽管我确信它们的用处,当然。 我在以前的工作中使用了一些不起眼的商业工具,在当前的工作中使用了 Perforce,并在我的小型个人项目中使用了 TortoiseS
所以我想知道一些我应该避免在 javascript 中做的事情以获得良好的 SEO 排名。在我的下一个站点中,我将广泛使用 jquery 和 javascript,但不想牺牲 SEO。那么您认为我应该
基本上,我想知道什么是避免 future CSS 代码出现问题和混淆的最佳方法... 像这样命名 CSS 属性: div#content ul#navigation div.float-left (真
我是一名优秀的程序员,十分优秀!