2017-10-29 81 views
1

我是一名学生,我想用一个带有微缩框架的小网站练习MVC和OOP。在课堂上和自己一起使用装饰器

所以我的控制器实例化一个Bottle对象,并将其发送给我的模型。我的模型需要使用Bottle类的“路由”装饰器来定义路由(例如,@app.route("/blog"))。

但它看起来像我不能在类中使用装饰器,因为self不存在方法外。

那么我怎么能在MVC和OOP方法中做到这一点?即我想避免在一个类之外实例化Bottle并将其用作全局变量。

谢谢。

#!/usr/bin/env python 
#-*-coding:utf8-*- 

from bottle import Bottle, run 




class Model(): 
    def __init__(self, app): 
     self.app = app 


    @self.app.route("/hello") ### dont work because self dont exist here 
    def hello(self): 
     return "hello world!" 


class View(): 
    pass 


class Controller(): 
    def __init__(self): 
     self.app = Bottle() 
     self.model=Model(self.app) 



if __name__ == "__main__": 
    run(host="localhost", port="8080", debug=True) 

回答

1

方式一:

class Model(object): 
    def __init__(self, app): 
     self.app = app 
     self.hello = self.app.route("/hello")(self.hello) 

    def hello(self): 
     return "hello world!" 
+0

还不错,谢谢 – vildric