Ошибка вызова переменных из класса метода

#python #python-2.7 #web2py-modules

#python #python-2.7 #web2py-модули

Вопрос:

Я работаю над простой игрой / приложением. Когда я вызываю переменную в web2py представлении, я получаю эту ошибку:

 quack= duck.quack()
TypeError: unbound method quack() must be called with duck instance as first argument (got nothing instead)
  

мои коды здесь:
В модуле

 from gluon import *
class duck():
    def quack():
        return 'Quacks like a duck'
    def walk():
        return 'Walks like a person'
  

В контроллере

 def data_filters():
    fils = duck.quack()
    return dict(fils=fils) 
  

В представлении:

 {{extend 'layout.html'}}
{{=fils}}  
  

Ответ №1:

Как правило, вам необходимо создать экземпляр вашего класса, если вы хотите использовать его методы.

 class duck():
    def quack(self):

#...

x = duck()
fils = x.quack()
  

Однако, если методу не нужно ссылаться на self объект или какие-либо атрибуты объекта, вы можете пометить его как статический метод и продолжить использовать duck.quack() , как сейчас.

 class duck():
    @staticmethod
    def quack():
        #...