如何在Bottle微框架中使用类方法而不是函数?

时间:2016-03-17 18:45:00

标签: python bottle

我正在尝试使用我自己的类而不是funcons的方法。 但是由于“语法错误”,代码失败了。我做错了什么?

from bottle import route, run, template

class controller():

    def test(self):
        return ("<h1>Its a main page!</h1>")

    def hello(self,name):
        return "Hello {0}".format(name)


sc = controller()

@route('/test')
sc.test()

@route('/hello/<name>')
def index(name):
    return template('<b>Hello {{name}}</b>!', name=name)


@route('/')
def indexFunc():
    return ('<h1>Hello on first App!!</h1>!')



run(host='localhost', port=8080)

2 个答案:

答案 0 :(得分:1)

sc.test()返回一个字符串。你不能装饰一个字符串。所以第一个问题是,你是调用那个方法(因此试图修饰它的结果)而不是装饰方法本身。

第二个问题是@装饰器语法必须后跟函数定义,即def关键字。您可以编写一个除了调用sc.test()之外什么都不做的函数,由llyas调用shown。或者你可以利用这样一个事实:@只是函数调用的语法糖,只需写:

route('/test')(sc.test)

答案 1 :(得分:0)

您无法修饰函数调用,您可以修饰函数定义。 尝试替换此行:

sc.test()

与此相符:

@route('/test')
def view():
    return sc.test()