装饰器如何与python中的类一起使用

A.楚申

我试图了解某个类的某个单例装饰器实现是如何工作的,但我只是感到困惑。

这是代码:

def singleton(cls):
    instance = None

    @functools.wraps(cls)
    def inner(*args, **kwargs):
        nonlocal instance
        if instance is None:
            instance = cls(*args, **kwargs)
        return instance
    return inner

@deco是的语法糖cls = deco(cls),因此在此代码中,当我们定义我们的cls类并用此singleton装饰器包装时cls将不再是类,而是一个函数。Python动态搜索变量链接到的对象,因此稍后我们尝试创建类的实例,然后运行此代码行instance = cls(*args, **kwargs),我们是否将进入无限递归?cls目前还不是一个类,它是一个函数,因此应自行调用,以进行递归。

但这很好。将创建一个单调,并且不会发生递归。它是如何工作的?

约翰·拉鲁伊

该函数inner在局部变量上关闭cls

cls是对该类的引用。它永远不会反弹到其他任何东西。

装饰器返回一个函数,该函数返回一个实例,但这不会影响内部cls变量所引用的内容

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将装饰器与类构造器一起使用

来自分类Dev

如何将类装饰器与泡菜一起使用?

来自分类Dev

python装饰器如何与递归一起工作?

来自分类Dev

如何与Spyne一起使用多个装饰器

来自分类Dev

将派生类的超级方法与类装饰器一起使用时发生TypeError

来自分类Dev

Autofac:如何使用相同的接口注册多个类型以与装饰器一起使用?

来自分类Dev

装饰器无法与yield命令一起正常使用

来自分类Dev

与文件元素一起使用装饰器

来自分类Dev

post方法不能与zend框架中的窗体装饰器一起使用

来自分类Dev

ServiceLoader.load如何与JPMS中的类加载器一起使用?

来自分类Dev

与Pyinvoke @task装饰器一起使用多个装饰器

来自分类Dev

“if”如何与verilog中的寄存器一起使用?

来自分类Dev

如何在Python 3中将CSV编写器与GZIP文件一起使用?

来自分类Dev

追加如何与python中的for循环一起使用

来自分类Dev

如何与 pytest 和选项解析器一起执行 python 类模块?

来自分类Dev

如何制作功能装饰器并将它们链接在一起?

来自分类Dev

如何让@connect 装饰器与 redux-saga 一起工作?

来自分类Dev

如何使shared_ptr包装器类与make_shared一起使用

来自分类Dev

将验证器与未保存在数据库中的类一起使用

来自分类Dev

如何在类层次结构中处理python装饰器?

来自分类Dev

如何在Python的类装饰器中传递args?

来自分类Dev

将装饰器模式与QWidget一起使用是否可行?

来自分类Dev

将MobX @action装饰器与异步函数和.then一起使用

来自分类Dev

可以将装饰器与CSF格式的HTML故事书一起使用吗?

来自分类Dev

Django Rest-将@action与自定义装饰器一起使用

来自分类Dev

可以将装饰器与CSF格式的HTML故事书一起使用吗?

来自分类Dev

使带有args的装饰器与方法一起使用:self不存在

来自分类Dev

将@property装饰器与@ asyncio.coroutine一起使用而不会产生可能的收益?

来自分类Dev

对 Python 类中的相关属性使用 @property 装饰器

Related 相关文章

  1. 1

    将装饰器与类构造器一起使用

  2. 2

    如何将类装饰器与泡菜一起使用?

  3. 3

    python装饰器如何与递归一起工作?

  4. 4

    如何与Spyne一起使用多个装饰器

  5. 5

    将派生类的超级方法与类装饰器一起使用时发生TypeError

  6. 6

    Autofac:如何使用相同的接口注册多个类型以与装饰器一起使用?

  7. 7

    装饰器无法与yield命令一起正常使用

  8. 8

    与文件元素一起使用装饰器

  9. 9

    post方法不能与zend框架中的窗体装饰器一起使用

  10. 10

    ServiceLoader.load如何与JPMS中的类加载器一起使用?

  11. 11

    与Pyinvoke @task装饰器一起使用多个装饰器

  12. 12

    “if”如何与verilog中的寄存器一起使用?

  13. 13

    如何在Python 3中将CSV编写器与GZIP文件一起使用?

  14. 14

    追加如何与python中的for循环一起使用

  15. 15

    如何与 pytest 和选项解析器一起执行 python 类模块?

  16. 16

    如何制作功能装饰器并将它们链接在一起?

  17. 17

    如何让@connect 装饰器与 redux-saga 一起工作?

  18. 18

    如何使shared_ptr包装器类与make_shared一起使用

  19. 19

    将验证器与未保存在数据库中的类一起使用

  20. 20

    如何在类层次结构中处理python装饰器?

  21. 21

    如何在Python的类装饰器中传递args?

  22. 22

    将装饰器模式与QWidget一起使用是否可行?

  23. 23

    将MobX @action装饰器与异步函数和.then一起使用

  24. 24

    可以将装饰器与CSF格式的HTML故事书一起使用吗?

  25. 25

    Django Rest-将@action与自定义装饰器一起使用

  26. 26

    可以将装饰器与CSF格式的HTML故事书一起使用吗?

  27. 27

    使带有args的装饰器与方法一起使用:self不存在

  28. 28

    将@property装饰器与@ asyncio.coroutine一起使用而不会产生可能的收益?

  29. 29

    对 Python 类中的相关属性使用 @property 装饰器

热门标签

归档