当前位置: 首页 > 面试题库 >

类的Python functools.wraps等效项

朱通
2023-03-14
问题内容

当使用一个类中定义一个装饰,我怎么自动转移__name____module____doc__?通常,我会使用functools中的@wraps装饰器。这是我为一个类所做的事情(这不完全是我的代码):

class memoized:
    """Decorator that caches a function's return value each time it is called.
    If called later with the same arguments, the cached value is returned, and
    not re-evaluated.
    """
    def __init__(self, func):
        super().__init__()
        self.func = func
        self.cache = {}

    def __call__(self, *args):
        try:
            return self.cache[args]
        except KeyError:
            value = self.func(*args)
            self.cache[args] = value
            return value
        except TypeError:
            # uncacheable -- for instance, passing a list as an argument.
            # Better to not cache than to blow up entirely.
            return self.func(*args)

    def __repr__(self):
        return self.func.__repr__()

    def __get__(self, obj, objtype):
        return functools.partial(self.__call__, obj)

    __doc__ = property(lambda self:self.func.__doc__)
    __module__ = property(lambda self:self.func.__module__)
    __name__ = property(lambda self:self.func.__name__)

是否有一个标准的装饰器来自动创建名称模块和文档?另外,要使get方法自动化(我想这是为了创建绑定方法?)是否缺少任何方法?


问题答案:

每个人似乎都错过了显而易见的解决方案。

>>> import functools
>>> class memoized(object):
    """Decorator that caches a function's return value each time it is called.
    If called later with the same arguments, the cached value is returned, and
    not re-evaluated.
    """
    def __init__(self, func):
        self.func = func
        self.cache = {}
        functools.update_wrapper(self, func)  ## TA-DA! ##
    def __call__(self, *args):
        pass  # Not needed for this demo.

>>> @memoized
def fibonacci(n):
    """fibonacci docstring"""
    pass  # Not needed for this demo.

>>> fibonacci
<__main__.memoized object at 0x0156DE30>
>>> fibonacci.__name__
'fibonacci'
>>> fibonacci.__doc__
'fibonacci docstring'


 类似资料:
  • 等效的 ANSI SQL 数据类型 下列表列出了 ANSI SQL 数据类型和等效的 Microsoft Jet 数据库引擎 SQL数据类型还有它们的有效同义字。并且列出了 等效的 Microsoft SQL服务器数据类型。 ANSI SQL 的数据类型 Microsoft Jet SQL 的数据类型 同义字 Microsoft SQL 服务器数据类型 BIT,BIT VARYING BINARY

  • 问题内容: 我来自SQL Server背景。MySQL中的下列等效数据类型是什么: -支持所有语言的国际多字节字符 -允许很长的文本文档 问题答案: 通过去http://msdn.microsoft.com/en- us/library/ms186939.aspx ,我要说的是, 是最接近的等效项。但我看不到有很多人在使用它,更多人在使用: 据我所知,字符集utf8和ucs2允许使用相同的字符,只

  • 问题内容: 下面的Objective-C代码等效于Swift代码。我找不到带有运行时概念的快速主题。 试图获取类的对象? 更新: 尝试以下代码,出现错误 问题答案: 首先,在不知道您在Objective-C中使用该类对象的目的的情况下,很难将该代码转换为Swift。 在Objective-C中,类对象是对象,并且类型可以保存指向任何类对象的指针。但是,当将Objective-C API桥接到Swi

  • 问题内容: 什么是C#3.5数据类型中的uniqueidentifier(SQL Server 2005)等效项? 问题答案: 它应该是System.Guid或Nullable

  • 问题内容: 我的要求是拥有一个线程,该线程可以维护BlackBerry设备与服务器之间的套接字连接并交换命令,类似于请求和响应。 我的问题是,我需要这个线程在后台运行 所有的时间 ,并保持提供给用户的UI。因此,当服务器发出命令时,此线程将对其进行解析并更新UI,并且如果BlackBerry用户发出了操作,则该线程会将其发送到服务器,然后服务器将对其进行处理。 我在Android中使用开发了相同的

  • 问题内容: 是否有等效于JSON 的XSLT?允许我像XSLT一样对JSON进行XML转换。 问题答案: 有趣的主意。在Google上进行的一些搜索产生了一些感兴趣的页面,包括: 有关如何实现“ jsonT”工具的概述,以及一些下载 关于该实现的一些讨论 一家公司可能已经实施了适当的措施 希望这可以帮助。