小编use*_*486的帖子

如何区分装饰器中的方法和功能?

我想编写一个装饰器,它的行为会有所不同,具体取决于它是应用于函数还是方法.

def some_decorator(func):
    if the_magic_happens_here(func): # <---- Point of interest
        print 'Yay, found a method ^_^ (unbound jet)'
    else:
        print 'Meh, just an ordinary function :/'
    return func

class MyClass(object):
    @some_decorator
    def method(self):
        pass

@some_decorator
def function():
    pass
Run Code Online (Sandbox Code Playgroud)

我想inspect.ismethod(),inspect.ismethoddescriptor()inspect.isfunction()但没有运气.问题是方法实际上既不是绑定方法也不是非绑定方法,而是普通函数,只要它是从类体内访问即可.

我真正想要做的是将装饰器的动作延迟到实际实例化类的程度,因为我需要在其实例范围内调用方法.为此,我想用属性标记方法,然后在调用.__new__()方法时搜索这些属性MyClass.这个装饰器应该工作的类需要从我控制的类继承.您可以将此事实用于您的解决方案.

在正常功能的情况下,延迟不是必需的,装饰者应该立即采取行动.这就是我想要区分这两种情况的原因.

python decorator

8
推荐指数
2
解决办法
801
查看次数

twisted.web的threading.local等价物?

在异步环境中,threading.local不再保证是上下文本地的,因为几个上下文可以在单个线程中共存.大多数异步框架(gevent,eventlet)提供了get_current_context()识别当前上下文的功能.有些提供了一种猴子补丁的方式,threading.local因此它是"greenthreads"或其他特定于框架的上下文的本地.我在扭曲的文档中找不到这样的功能.我该怎么做呢?

python twisted twisted.web

6
推荐指数
1
解决办法
242
查看次数

标签 统计

python ×2

decorator ×1

twisted ×1

twisted.web ×1