Я использую Python и GAE, и я пытаюсь создать словарь с ключами, являющимися идентификатором пользователя, а значения - объектом «Студент». Однако значения моего словаря - это «Нет», а не объект-ученик.GAE и Python: значения словаря возвращают None вместо объекта
{'60': , '59': }
Я был бы очень признателен, если бы кто-то мог указать мне в правильном направлении!
Student.py
class Student:
def __init__(self, name, s_id, rew = {}):
self.name = name.strip()
self.rewards = {"Creativity": 0, "Helping Others":0, "Participation":0, "Insight":0}
self.totalRewardPoints = 0
self.s_id = s_id
Main.py (я только включил соответствующий код)
class PageHandler(webapp2.RequestHandler):
def write(self, *a, **kw):
self.response.out.write(*a, **kw)
def initialize(self, *a, **kw):
webapp2.RequestHandler.initialize(self, *a, **kw)
def create_students(self):
user = db.GqlQuery("SELECT * FROM User WHERE position='student'")
for u in user:
temp_id = str(u.key().id())
self.students[temp_id] = student.Student(u.name, temp_id)
class MainPage(PageHandler):
students = {}
def get(self):
user = db.GqlQuery("SELECT * FROM User WHERE position='student'")
for u in user:
temp_id = str(u.key().id())
self.students[temp_id] = student.Student(u.name, temp_id)
self.write(self.students)
app = webapp2.WSGIApplication([('/', MainPage)], debug=True)
Пожалуйста, переформатируйте свой код, отступы - все неправильно. –
Помимо проблем, которые уже определил Тим, в вашем коде есть несколько серьезных проблем с Python. Никогда не используйте литерал словаря как параметр функции по умолчанию, как в '__init__' - каждый вызов будет получать словарь _same_, и если вы его измените, все последующие вызовы, конечно же, получат модифицированную версию. Аналогично, ваше определение «учеников» в классе «MainPage» представляет собой переменную уровня класса, а не переменную экземпляра. Вместо этого определите ее внутри 'get()'. –
Кроме того, если 'Student' должен быть модельным классом, вы определенно не должны переопределять' __init__'. Трудно сделать правильно - вместо этого используйте заводский метод. –