- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
最佳答案
“已分配”参数告诉包装函数上的哪些属性将分配给包装(装饰)函数上的同名属性。默认情况下,它们是 '__module__'、'__name__'、'__doc__'
,它们在变量 functools.WRAPPER_ASSIGNMENTS 中被定义为默认值。正如@abarnet 在评论中所说,另一个可能想要复制的属性示例是 Python 3.x 中的函数注释 - 因此您可能希望分配的参数为:('__module__', '__name__ ', '__doc__', '__annotations__')
.
“更新”参数或多或少是相同的,但是包装器中的相应属性将使用装饰函数中的该属性调用它的“更新”方法 - 这意味着它仅在两个属性都是可变的时才有效映射 - 例如字典。默认情况下,它将使用包装的 __dict__
更新包装器的 __dict__
属性,使包装器函数反射(reflect)它可能已由不同的底层装饰器分配的所有无关属性(在调用“包装”的装饰器之前应用的装饰器被应用)。更改“已更新”的唯一可能用例是将其更改为空序列,以防止 __dict__
被更新。否则,如果您想更新更多属性,那将意味着您将从事一个项目,该项目将在可调用对象上使用不同的字典属性,此时您肯定会遇到比不知道如何正确使用“包装”更多的问题.
TL;DR:您可能发现一些有用的东西:
@wraps(func, ('__module__', '__name__', '__doc__', '__anotations__'), ())
def wrapper(*args, **kw):
...
但不一定。
作为最后的轶事说明,如果装饰对象是具有 __call__
方法而不是函数的类的实例,则 __dict__
更新将使包装函数拥有装饰实例的所有实例属性的副本——这更多是副作用而不是有用的东西,因为这些复制的属性不会跟随装饰实例中状态的进一步变化(并且装饰实例上的方法仍然会接收“self”作为未包装的实例):
>>> from functools import wraps
>>> class MyCallable(object):
... def pr(self):
... print(self.a)
... def __call__(self, new_a):
... self.a = new_a
>>> def deco(clb):
... @wraps(clb)
... def wrapper(*args):
... return clb(*args)
... return wrapper
...
>>> m = MyCallable()
>>> m(1)
>>> m.a
1
>>> m.pr()
1
>>> m = deco(m)
>>> m(2)
>>> m.a
1
>>> m.__wrapped__.pr()
2
因此,这可能是您不想将 __dict__
复制到包装器,而是始终通过 __wrapped__
属性访问原始实例的示例,如上所示。但是,我实际上离题了,因为我从来没有见过有人用装饰器包装类的实例,并且想不出这样的用例,如果类方法首先做装饰器应该做的事情,就不能更好地解决这个问题。
关于python - functools.wraps的 `assigned`和 `updated`参数如何使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29933914/
我创建了一个包含社交图标的列表。这些图标应该环绕在小屏幕上。 我使用 flex-wrap: wrap; 它在 Firefox 和 Chrome 中完美运行: 但是 Internet Explorer
我很惊讶地发现我的 white-space: pre-wrap;文本在 > 换行和 "人物。我以为它只会换行,- , 以及一个或多个空格之后。 这是一个fiddle . 它在" 之后换行, 在
我被分配了重新创建以下网站的任务:https://plantanapp.com/learn 我做了一些事情,但是每次我解决一个问题时,都会出现另外两个问题。 我是HTML和CSS的新手,并不真正了解元
我偶然发现了 jQuery 的 wrap() 函数。 当我试图包装两个 div 标签时,它们之间有一些文本,而不是两个 div 之间没有文本时,它的行为不知何故不同。 j查询: var wrapper
我正在尝试在 w3c css 验证器上验证一个 css 文件。当它被测试时,它返回一个错误,指出 “属性 flex-wrap- 不存在:wrap”。这是我 css 验证器认为错误的部分。 .row {
这个问题在这里已经有了答案: Flex items create space between them when they wrap [duplicate] (1 个回答) 关闭 6 年前。 我正在
我正在制作一个网页,其中的标题有一个主要主题和一个描述符,每个都包含在标签中。 我已经查找了 标签,它似乎只在你有长字符串时才有效没有空格。但是我在文本中断断续续地有空格。 我需要的是我可以在两个元
我听到很多关于 wrap 面板加载速度较慢的消息,因此我们需要一个虚拟化面板。 有人可以给我一个小的环绕面板示例,它可以证明加载速度较慢等它需要一个虚拟面板。 我设置了一个环绕面板作为列表框的面板控件
我需要用 sinon 多次包装一个方法,以便能够根据参数返回不同的对象。我该怎么做? 我要测试的 Controller 看起来像这样: const servicePackagesOfferingRep
我在运行测试时收到了上述错误消息。下面是我的代码(我正在使用 Backbone JS 和 Jasmine 进行测试)。有谁知道为什么会这样? $(function() { describe("Ca
问题是关于.text-wrapper,它有display:flex; flex-wrap:wrap 应用于它。使用 flex-wrap:wrap 的原因是,否则 .text-wrapper 和 .ta
我有三个带有 Bootstrap 3 的 DIV 容器,其中前两个在第一行,第三个在下一行,直到浏览器宽度直到 991 px。高于 992 px,所有三个容器应排成一行。每行容器的高度应该是最高的 (
(我使用的是 Chrome v.39+) 我正在尝试使用 flex-wrap 属性水平和垂直堆叠子 div,但我看到了一些非常奇怪的行为。例如,如果有 3 个子 div,最后一个的宽度为 100%(使
我必须这样做。适用于宽屏、中屏和小屏 https://pp.vk.me/c629328/v629328337/21bd7/izp9QG8Qcg4.jpg 这是我的代码 .section-items-c
我想要一个每行 3 个元素的容器 flex div,问题是当我添加第四个元素时(它应该自动换行到第二行),而不是它停留在一行并缩小其他元素。我启用了 flex-wrap: wrap; 这是我的代码:
假设我正在使用一个带有 flex-direction:row 和 flex-wrap:wrap 的 flexbox 容器。 根据浏览器窗口的大小,每行中可能有 2、3、4 或更多项。 我想在每隔一行的
我已经添加了所有属性。当我更改浏览器宽度时,它们开始相互粘连,这是因为我有太多图像而无法正常工作? 无法将图像换行: #skills>div { margin-top: 80px; displ
我想制作一个网格,其中每行有两张图片。我正在使用 flex-wrap: wrap;它在 android 4.4+ 上运行良好,但不适用于低于 android 4.4 的系统。我想在不使用 flex-w
我的网站出现异常行为。我最近在网站管理员工具上发现,它发现我网站上的许多网页都出现抓取错误 404。我无法理解这些页面是如何创建的,因为所有 404 页面最后都包含这几个字 wrap-function
我正在使用 MongoDB C# 驱动程序构建一些更新语句。 The C# API在 Builder 命名空间中包括 Wrapped 和“Un-Wrapped”方法。 从表面上看,这些似乎因泛型不同而
我是一名优秀的程序员,十分优秀!