【问题标题】:Where do you put a decorator after you've written it?写完后把装饰器放在哪里?
【发布时间】:2018-10-17 16:52:45
【问题描述】:

我正在尝试编写我的第一个装饰器。我已经看过很多关于它的视频教程和博客文章,但是我还没有看到关于将装饰器放在哪里以便被装饰的函数可以找到它的任何内容。这似乎很基本,也许对那些以前做过的人来说是“显而易见的”,但既然那不是我,我在问。注意我不是问在哪里放置@decorator。我知道它在被装饰的函数上方。但是装饰器本身必须被编写并放置在 @ 语法可以找到和应用它的地方。我见过的所有示例都将它们放在同一个文件或脚本中,但在实际实践中我从未见过像这样的装饰器,也没有见过将其引入应用程序的导入语句。那么它应该在哪里,被装饰的app/python是如何找到的呢?

【问题讨论】:

  • 这是从标准库 from functools import wraps 导入

标签: python decorator python-decorators


【解决方案1】:

您可能知道,装饰器只是一个函数,就像任何其他函数一样。因此,您可以像放置任何其他功能一样放置它

  1. 在同一个文件中
  2. 在不同的文件中。在这种情况下,您还需要 import 函数

【讨论】:

  • 我选择了 wim,因为他比较详细,但你们俩都很快。显然,当我说我从未见过它导入时,我只想到内置。生活和学习!
【解决方案2】:

装饰器只是一个可调用的,通常是一个函数。这意味着您可以在任何您想要任何其他函数的地方定义它并以相同的方式导入它。

from mydecorators import mydecorator

@mydecorator
def f():
    ...

由于模块级类或函数的修饰发生在导入时,因此必须在使用之前解析名称。这禁止在使用它之后定义或导入装饰器,这将像往常一样成为NameError 异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-14
    • 1970-01-01
    • 2023-03-17
    • 2012-10-14
    • 2013-09-21
    • 2011-03-18
    • 2020-09-30
    相关资源
    最近更新 更多