У меня есть метод 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')
Спасибо, Тим, передавая в качестве аргумента трюк. Я использовал класс Utility для хранения общих методов, используемых в нескольких классах, вместо того, чтобы объявлять их в каждом классе. Я могу видеть из вашего комментария, как это может быть расточительным для создания экземпляра класса для каждого запроса, хотя мне нужно и будет инвестировать в некоторое образование по разработке программного обеспечения. –
JUst определяет методы как функции в модуле утилиты. Затем просто используйте 'utilities.parse_query_string_paramter'. Помните, что python заставляет вас использовать объект/классы для каждой ситуации. –
Thannks again Tim, теперь я реорганизую использование наследования вместо класса утилиты, добавляющего излишнюю сложность в управление приложением. –