2013-09-11 5 views
0

У меня есть метод Utility класса я хочу использовать из других классов App Engine Python:Получить контекст объекта RequestHandler из другого класса

def parse_query_string_paramter(self, paramter, default=None): 

     if self.request.get(paramter): 

      # ... 

Я не уверен в том, как передать контекст исходного запроса при вызове этот метод из другого класса, как показано ниже:

import webapp2 
from utilities import Utility 


class Search(webapp2.RequestHandler): 

    def get(self): 

     utility = Utility() 
     search_query = utility.parse_query_string_paramter('q') 
     # ... 

ошибка возвращенного ниже имеет смысл для меня, решение Pythonic хотя я неясно, с чего начать:

File "~/utilities.py", line 112, in parse_query_string_paramter 
    if self.request.get(paramter): 
AttributeError: 'NoneType' object has no attribute 'get' 

Update:

Благодаря решению Тима, обновленный код ниже теперь работает для меня:

def parse_query_string_paramter(self, context, paramter, default=None): 

     if context.request.get(paramter): 

      # ... 

и передавая self из класса вызывающего, как показано ниже:

search_query = utility.parse_query_string_paramter(self, 'q') 

ответ

1

Вам необходимо передать запрос от обработчика Search в качестве аргумента в класс Utility при создании экземпляра или как аргумент метода parse_query_string_paramter, он не может магически получить объект запроса.

В стороне неясно, почему у вас будет класс Утилиты, если какое-либо состояние удерживается экземпляром Утилиты на время запроса, когда вам может понадобиться только функция.

+0

Спасибо, Тим, передавая в качестве аргумента трюк. Я использовал класс Utility для хранения общих методов, используемых в нескольких классах, вместо того, чтобы объявлять их в каждом классе. Я могу видеть из вашего комментария, как это может быть расточительным для создания экземпляра класса для каждого запроса, хотя мне нужно и будет инвестировать в некоторое образование по разработке программного обеспечения. –

+1

JUst определяет методы как функции в модуле утилиты. Затем просто используйте 'utilities.parse_query_string_paramter'. Помните, что python заставляет вас использовать объект/классы для каждой ситуации. –

+0

Thannks again Tim, теперь я реорганизую использование наследования вместо класса утилиты, добавляющего излишнюю сложность в управление приложением. –

Смежные вопросы