GAE - Получение TypeError, требующей передачи экземпляра класса в собственный метод класса - PullRequest
1 голос
/ 18 марта 2010

Я действительно новичок в программировании ... Я создал класс, чтобы предоставлять вспомогательную информацию для пользовательского объекта Google API пользователя. Я храню эту информацию в хранилище данных, используя db.model.

Когда я вызываю метод okstatus моего класса user_info, используя этот код:

elif user_info.okstatus(user):
    self.response.out.write("user allowed")

Я получаю эту ошибку:

unbound method okstatus() must be called with user_info instance
as first argument (got User instance instead)

Вот мой класс user_info.

class user_info:
    def auth_ctrlr(self, user):
        if self.status(user) == status_allowed:
            return ("<a href=\"%s\">Sign Out</a>)" %
                (users.create_login_url("/")))
        else:
            return ("<a href=\"%s\">Sign In or Get an Account</a>)" %
                (users.create_logout_url("/")))
    def status(self, user):
        match = sub_user.gql(qu_by_user_id, user.user_id)
        return match.string_status
    def group(self, user):
        match = sub_user.gql(qu_by_user_id, user.user_id)
        grp = group_names.gql(qu_by_user_id, match.groupID)
        return grp
    def okstatus(self, user):
        match = self.status(user)
        if match == status_allowed:
            return True

Насколько я понимаю, аргумент "self" в вызывающих аргументах метода описывает его как дочерний класс. Я перепробовал все, что мог придумать, и не могу найти какую-либо связанную информацию в Интернете. Может кто-нибудь сказать, пожалуйста, что я делаю не так?

Спасибо

1 Ответ

1 голос
/ 18 марта 2010

self должен быть экземпляром класса. Поскольку вы на самом деле никогда не используете , вы можете просто превратить все эти методы в функции (и изменить self.status кейсы на status).

Если вы «фетишист класса» и абсолютно настаиваете на сохранении функций как методов в классе (а не функций верхнего уровня модуля, которыми они «хотят» быть! -), то измените сайт вызова на

elif user_info().okstatus(user):

то есть создайте экземпляр вашего user_info класса и вызовите для него метод (бесполезный экземпляр затем немедленно исчезнет, ​​указывая, что это действительно должны быть функции; -).

...