小编jor*_*gen的帖子

如何在Python 2.7的观察者模式中使用装饰器

下面非常简化的代码中的观察者模式运行良好.我想有一个装饰器@on_event在Observable单例中进行注册.

在下面的O2类中,这不起作用.问题当然是在创建实例之前调用了on_event装饰器,并且注册将是未绑定方法event.在某种程度上,我必须延迟注册,直到初始化O2对象.也许不用说,但我想在O2中添加的是装饰器,如下面的代码所示.

但肯定必须有解决方案吗?我用Google搜索但找不到任何东西,并尝试了几种方法.

class Observable(object):
    _instance = None

    @classmethod
    def instance(cls):
        if not cls._instance:
            cls._instance = Observable()
        return cls._instance

    def __init__(self):
        self.obs = []

    def event(self, data):
        for fn in self.obs:
            fn(data)

def on_event(f):
    def wrapper(*args):
        return f(*args)
    Observable.instance().obs.append(f)
    return wrapper

class O(object):

    def __init__(self, name):
        self.name = name
        Observable.instance().obs.append(self.event)

    def event(self, data):
        print self.name + " Event: " + data

class O2(object):

    def __init__(self, name):
        self.name = name

    @on_event
    def eventx(self, data):
        print self.name + …
Run Code Online (Sandbox Code Playgroud)

python decorator python-2.7 python-decorators

4
推荐指数
1
解决办法
1189
查看次数

是否定义了Python烧瓶的路径顺序?

我的观点中有类似下面的设置:

@app.route("/test")
def test():
    ...
@app.route("/<to>")
def page(to):
    ...
Run Code Online (Sandbox Code Playgroud)

在访问"/ test"url时,似乎总是会调用示例中的函数测试.这也是我想要的.但我在文档中找不到这种行为.这样定义的名称总是优先于变量吗?或者是重要的定义的顺序?我能否以任何方式确定优先级,以确保将来不会破坏?

python flask python-2.7

2
推荐指数
1
解决办法
863
查看次数

标签 统计

python ×2

python-2.7 ×2

decorator ×1

flask ×1

python-decorators ×1