2016-03-17 3 views
0

Я пытаюсь использовать методы своего класса вместо funcons. Но этот код не работает из-за «синтаксической ошибки». Что я делаю не так?Как использовать методы класса вместо функций в Microframework Bottle?

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) 
+0

Я предполагаю, что на «методы класса» вы имеете в виду «методы», и не @classmethod питона? – Ilyas

+0

да, thats right – Mariik

ответ

0

Вы не можете украсить вызов функции, вы украшаете определение функции. Попробуйте заменить эту строку:

sc.test() 

Wiith это:

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

sc.test() возвращает строку. Вы не можете украсить строку. Итак, первая проблема заключается в том, что вы вызывают этот метод (и поэтому пытаются украсить его результат) вместо того, чтобы украшать сам метод.

Вторая проблема заключается в том, что после синтаксиса декоратора @ должно следовать определение функции, то есть ключевое слово def. Вы можете написать функцию, которая ничего не делает, кроме вызова sc.test(), как shown от llyas. Или вы можете воспользоваться тем, что @ просто синтаксический сахар для вызова функции, а просто написать:

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