GAE - Mise en TypeError exigeant instance de classe est passé à propre méthode de classe
-
20-09-2019 - |
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
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; -).