Question

Je suis vraiment nouveau à la programmation ... Je mis en place une classe pour donner des informations de support pour de Google objet utilisateur de l'API utilisateur. Je stocke cette information dans le magasin de données en utilisant db.Model.

Quand j'appelle la méthode okstatus de ma classe user_info en utilisant ce code:

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

Je reçois cette erreur:

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

Voici ma classe 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

Ma compréhension est que l'argument « soi » à l'intérieur des arguments appel de la méthode décrit comme un enfant à la classe. J'ai tout essayé je peux penser et ne peut pas trouver toute information connexe en ligne. Quelqu'un peut-il s'il vous plaît me dire ce que je fais mal?

Merci

Était-ce utile?

La solution

self doit être une instance de la classe. Puisque vous jamais réellement utiliser , vous pouvez simplement faire toutes ces méthodes en fonctions (et en changeant les cas de self.status juste de status).

Si vous êtes un « féticheur de classe », et tenez absolument à garder les fonctions que les méthodes dans une classe (plutôt que les fonctions de haut niveau du module, ils « veulent » être -), puis changer le site d'appel

elif user_info().okstatus(user):

qui est, faire une instance de votre classe user_info et appeler la méthode sur elle (l'instance inutile alors immédiatement disparaît, soulignant que ceux-ci devraient vraiment être fonctions; -).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top