Tag: 装饰

有一个装饰器来简单地caching函数返回值吗?

考虑以下几点: @property def name(self): if not hasattr(self, '_name'): # expensive calculation self._name = 1 + 1 return self._name 我是新的,但我认为caching可以被分解成一个装饰器。 只有我没有find像这样的人;) PS真正的计算不依赖于可变值

Python类装饰器

在Python 2.5中,是否有办法创build一个装饰器来装饰一个类? 具体来说,我想使用装饰器将成员添加到类,并更改构造函数为该成员的值。 寻找像下面这样的东西(在'class Foo:'上有一个语法错误: def getId(self): return self.__id class addID(original_class): def __init__(self, id, *args, **kws): self.__id = id self.getId = getId original_class.__init__(self, *args, **kws) @addID class Foo: def __init__(self, value1): self.value1 = value1 if __name__ == '__main__': foo1 = Foo(5,1) print foo1.value1, foo1.getId() foo2 = Foo(15,2) print foo2.value1, foo2.getId() 谢谢,罗布 编辑:重读这个问题,我想我真的是一种像Python中的C#接口一样的方法。 我需要改变我的想法。

Python memoising /延迟查找属性修饰器

最近我经历了一个包含许多类的现有代码库,其中实例属性反映了存储在数据库中的值。 我已经重构了很多这些属性,让他们的数据库查询被延期,即。 不能在构造函数中初始化,而只能在第一次读取时初始化。 这些属性在实例的生命周期中不会改变,但是它们是第一次计算的真正的瓶颈,只有在特殊情况下才真正被访问。 因此,它们也可以在从数据库中检索后进行caching(因此,这符合memoisation的定义,input只是“没有input”)。 我发现自己一遍又一遍地input下面的代码片段来获取各种类的各种属性: class testA(object): def __init__(self): self._a = None self._b = None @property def a(self): if self._a is None: # Calculate the attribute now self._a = 7 return self._a @property def b(self): #etc 有没有一个现有的装饰器已经在Python中做到这一点,我根本不知道? 或者,是否有一个相当简单的方法来定义一个装饰器来做到这一点? 我正在Python 2.5下工作,但2.6的答案可能仍然是有趣的,如果他们有很大的不同。 注意 这个问题之前,Python包括了很多现成的装饰器。 我已更新它只是为了更正术语。

保留装饰function的签名

假设我写了一个装饰器来做一些非常通用的事情。 例如,它可能会将所有参数转换为特定types,执行日志logging,实现记忆等。 这里是一个例子: def args_as_ints(f): def g(*args, **kwargs): args = [int(x) for x in args] kwargs = dict((k, int(v)) for k, v in kwargs.items()) return f(*args, **kwargs) return g @args_as_ints def funny_function(x, y, z=3): """Computes x*y + 2*z""" return x*y + 2*z >>> funny_function("3", 4.0, z="5") 22 一切都很好,迄今。 但是有一个问题。 装饰的function不保留原始function的文档: >>> help(funny_function) Help on function […]

我如何修剪空白?

有没有一个Python的function,将修剪string的空白(空格和制表符)? 示例: \t example string\t → example string

functools.wraps做什么?

在对另一个问题的回答发表评论时,有人说他们不确定functools.wraps在做什么。 所以我问这个问题,以便在StackOverflow上有一个logging供将来参考:functools.wraps究竟做了什么?

如何做一个function装饰链?

我怎样才能在Python中做两个装饰器,可以做到以下几点? @makebold @makeitalic def say(): return "Hello" …应该返回: "<b><i>Hello</i></b>" 我不是试图在真正的应用程序中这样做HTML – 只是想了解装饰器和装饰器链接如何工作。

装饰者的参数?

我有一个由装饰器传输变量“insurance_mode”的问题。 我会通过下面的装饰器语句来做到这一点: @execute_complete_reservation(True) def test_booking_gta_object(self): self.test_select_gta_object() 但不幸的是,这种说法是行不通的。 也许也许有更好的办法来解决这个问题。 def execute_complete_reservation(test_case,insurance_mode): def inner_function(self,*args,**kwargs): self.test_create_qsf_query() test_case(self,*args,**kwargs) self.test_select_room_option() if insurance_mode: self.test_accept_insurance_crosseling() else: self.test_decline_insurance_crosseling() self.test_configure_pax_details() self.test_configure_payer_details return inner_function