首页 > TAG信息列表 > python-decorators

装饰上下文管理器中的任何python函数

我想创建一个python上下文管理器,它将允许以下操作(用reverse_decorator应用修饰的函数,如果它是字符串,则将第一个参数取反): print('hi') with MyFunctionDecorator('print', reverse_decorator): print('hello') print('bye') 以导致: hi olleh bye 关键不是打印功能本身,

如何使用python-decorator包来装饰类方法?

我有一个装饰器,我想用它来装饰类方法.在下面的示例中,@mydec装饰器可以正常工作,但是在使用help()或pydoc时,它不会保留函数签名.为了解决这个问题,我研究了使用@decorator python-decorator包: import functools import decorator @decorator.decorator def mydec(func): @

具有参数的Python类修饰器,但未运行修饰的函数

我已经大部分工作了.我想要一个类装饰器(Decorator类),该装饰器接受可用于将方法包装在对象(Person的实例)上的参数(问候和告别). 一切正常,除了…永远不会运行Person类上的原始命令功能!如果我使用类似的方法手动调用该函数 output = getattr(instance, func.func_name)(command,

封装函数隐藏其属性?

这是我先前的问题Change an attribute of a function inside its own body的继续. 如果我包装了一个函数,以便它保留使用以下装饰器调用该函数的次数: def keep_count(f): @wraps(f) def wrapped_f(*args, **kwargs): f(*args, **kwargs) wrapped_f.count

理解装饰器:未指定参数时返回类型是一个函数

我将单个装饰器用于两个独立的函数:一个具有装饰器参数的规范;另一个没有它. 当不传递可选参数时,返回类型是一个函数(特别是装饰器中的inner_function).但是,当传递可选参数时,它将按预期工作. 您能解释一下这里发生了什么,以及为什么在这些情况下行为有所不同吗? def cache_disk(ca

我们可以使用装饰器设计任何函数吗?

在我的采访中,他们问我一个工具,该工具可以反转句子中的每个单词并从中创建最终句子.例如: s = 'my life is beautiful' output - `ym efil si lufituaeb` 我知道问题很简单,请在几分钟后解决: s = 'my life is beautiful' def reverse_sentence(s): string_reverse = []

python-如何使用函数注释来验证函数调用类型

我最近才发现有一种叫做函数注释的东西,但是我不太确定如何使用它.这是我到目前为止的内容: def check_type(f): def decorated(*args, **kwargs): counter=0 for arg, type in zip(args, f.__annotations__.items()): if not isinstance(arg, typ

python-使用类作为方法装饰器

这个问题已经在这里有了答案:            >            How can I decorate an instance method with a decorator class?                                    3个虽然有plenty of resources about using classes as

numpy.vectorize一个实例方法有可能吗?

我发现numpy.vectorize允许将希望将单个数字作为输入的“普通”函数转换为函数,该函数也可以将输入列表转换为该函数已映射到每个输入的列表.例如,以下测试通过: import numpy as np import pytest @np.vectorize def f(x): if x == 0: return 1 else: r

如何使装饰器可选择打开或关闭

我问,给定一个装饰器的函数,是否可以在不调用装饰器调用的情况下运行该函数? 给定一个函数foo,是否可以选择打开或关闭装饰器? 特定 @decorator def foo(): //do_somthing 是否可以运行foo与装饰器关闭? 可能存在一些函数,您可能希望在有或没有装饰器的情况下运行它.例如(并且不

python – 装饰类以监视属性更改

我想让课程在其中一个属性发生变化时自动向订阅者发送通知.所以,如果我写这个代码: @ChangeMonitor class ChangingClass(object): def __init__(self, x): self.x = x changer = ChangingClass(5) print("Going to change x.") changer.x = 6 print("Going to not

如何使用外部夹具跳过pytest?

背景 我在conftest file中使用fixture运行py.test.您可以看到下面的代码(这一切正常): example_test.py import pytest @pytest.fixture def platform(): return "ios" @pytest.mark.skipif("platform == 'ios'") def test_ios(platform): if platform != &#

如何在python中做一个条件装饰器

是否有可能有条件地装饰一个功能.例如,我想使用timer函数(timeit)来装饰函数foo(),只有doing_performance_analysis为True(参见下面的伪代码). if doing_performance_analysis: @timeit def foo(): """ do something, timeit function will return the time it takes

Python中的“at”(@)符号有什么作用?

我正在看一些使用@符号的Python代码,但我不知道它做了什么.我也不知道搜索Python文档会搜索什么,或者当包含@符号时Google不会返回相关结果.解决方法:行开头的@符号用于类,函数和方法装饰器. 在这里阅读更多: PEP 318: Decorators Python Decorators 您将遇到的最常见的Python装饰器

Python中的上下文管理器和装饰器之间的区别

两者之间的主要区别是什么?我一直在研究Python并遇到过它们.装饰器本质上是一个包装另一个函数的函数,你可以在特定函数执行之前和之后做任何事情. def my_decorator(some_function): def wrapper(*args, **kwargs): print("Do something before the function is calle

python – Flask如何知道调用哪个装饰函数?

所以我正在阅读基本的Flask教程,看看他们的代码就是这个片段: @app.teardown_appcontext def close_db_connection(exception): """Closes the database again at the end of the request.""" top = _app_ctx_stack.top if hasattr(top, 'sqlite_db&

python – 未调用函数装饰器

这让我疯狂,因为它应该是如此简单,但必须有一些我错过的Python怪癖.我有一个装饰器,我正在尝试应用于Flask路线,但由于某些原因,我的views.py中的装饰器似乎都没有被加载. decorators.py def admin_required(func): """Require App Engine admin credentials.""" @wraps(f

带有参数的Python Decorator只调用一次

请考虑以下简化示例: permitted = True class is_allowed(object): def __init__(self, some_arg): # this is actually needed in the complete code self.some_arg = some_arg def __call__(self, f): if permitted == False: rais

如何在装饰器中使用上下文管理器以及如何将在decorator中创建的对象传递给装饰函数

我有一个测试类,需要在最后进行一些清理.为了确保用户不会忘记这样做,我想在类中添加一个上下文管理器.我还有一个装饰器,我想在其中使用此上下文管理器来创建测试类的对象并将其传递给装饰函数.它甚至可能吗? 这就是我要做的事情: class test: def __init__(self, name):

Python:Monkeypatching一个对象的方法

我正在通过请求的Session类在python中访问API.我正在制作GET&使用requests.Session()调用POST方法. 在每次调用(GET / POST)失败时,我想通知另一个进程.我可以通过创建如下的实用程序方法来完成此操作: s = request.Session() def post(): try: s.post(URL,data,header

Python函数装饰器错误

我试图使用函数装饰器,但在这个例子中它对我不起作用,你能给我解决方案吗? def multiply_by_three(f): def decorator(): return f() * 3 return decorator @multiply_by_three def add(a, b): return a + b print(add(1,2)) # returns (1 + 2) * 3 = 9 解释

在python中访问装饰器属性?

是否可以在Python 3中访问装饰器属性? 例如:在调用装饰的斐波那契方法后,是否可以访问self.misses? class Cache: def __init__(self, func): self.func = func self.cache = {} self.misses = 0 def __call__(self, *args): if not (ar

PEP 8和Python装饰器

我正在开发一个项目,其中我有一个类,其上有一些10个装饰器,我正在使用它们来提供某些方法和属性的验证(如果相关,验证非常通用,并在其他地方重新使用)其他课程).我被一位朋友告知我,他是一个PEP8更多的人,而不是我这是一个糟糕的形式—然而,我不能find a cite that,甚至很好的建议

python – 基于类的装饰器和repr()保护

我试图让我的基于类的装饰器保持原始包装函数的repr()行为(以匹配functools.wraps装饰器在函数上的工作方式).我正在使用python 3.3. 首先我尝试了functools: import functools class ClassBasedDecorator(): def __init__(self, fn): self.fn = fn functools

python – 将函数转换为字段的装饰器是什么?

在某些时候,我遇到了一段代码,用python编写: class Foo(object): @Mystery def bar(): return 5+3 print Foo().bar 哪个打印8.然而我不记得装饰者被称为什么.我在想象事物,还是存在?如果确实存在它叫什么?解决方法:您正在寻找@property. 您可能想阅读how the @prope