J'essaie de simuler un portail d'accès au système à l'aide de classes et de méthodes. Je souhaite pouvoir demander à l'utilisateur son nom d'utilisateur à l'aide de l'entrée (), vérifier si cette entrée est un objet d'utilisateur de classe et, dans l'affirmative, vérifiez si le mot de passe est correct pour le nom d'utilisateur. Lorsque j'utilise une instance, c'est renvoyer false. Comment puis-je modifier cela pour fonctionner?
3 Réponses :
Si vous utilisez Python 3.x (que je vais supposer), Vous devrez garder une trace de tous les objets code> d'objets code> créés et recherchez l'objet avec le nom entré. P> Il existe différentes façons de le faire. Je vais supposer que les noms d'utilisateur sont uniques, je vais donc les utiliser dans un ensemble partagé: p> Notez que ceci est juste un exemple, et ce n'est pas une balle-preuve Ni la meilleure conception (on peut discuter si les utilisateurs code> code> appartiennent même à la classe code> Classe code> Classe Indice: probablement pas em>). Si le nom d'utilisateur d'un objet change après l'initialisation, l'ensemble ne sera pas mis à jour et que vous pourriez obtenir de mauvais résultats. Ce problème particulier peut être résolu en changeant Entrée code> renvoie une chaîne de sorte que isinstance (INPUT_USER, utilisateur) code> sera toujours < code> faux code>. self.username code> vers une propriété mais je suppose que c'est hors de portée de ce Q & A. P> p>
Les entrées utilisateur sont des chaînes. Toujours. Période. Vous ne pouvez donc pas "vérifier si cette entrée est un objet d'utilisateur de classe" - il ne sera jamais.
La solution ici consiste à maintenir une collection d'instances code> utilisateur code> et utilisez la chaîne d'entrée vers Rechercher un utilisateur correspondant. p> Notez que cela ne convient bien que comme projet de jouet bien sûr. P> P>
Contrairement aux deux autres réponses, celle-ci permet de faire facilement la correspondance de mot de passe mentionnée. En dehors de la curiosité: pourquoi ce essaie - sauf code> construction dans userscollection.get code> au lieu de renvoie self._users.get (nom d'utilisateur) code>? Autre que d'être plus explicite, quel est l'avantage? Est-ce que ça me manque quelque chose?
@shmee en fait, j'ai initialement prévu de soulever une exception personnalisée, et j'ai finalement décidé autrement mais n'a pas corrigé le code en conséquence
Je ne suis pas sûr que c'est ce que vous voulez faire, mais vous ne pouvez pas essayer ceci
Ajoutez une liste à votre classe afin que votre code ressemblera à ce code p > list_of_usernames = [] code>
et ensuite dans __ init __ () code> annexe nom d'utilisateur au list_of_usernames code> et à la fin class User():
list_of_usernames = []
def __init__(self, username, password):
self.username = username
self.password = password
self.list_of_usernames.append(username)
def change_pw(self, new_password):
self.password = new_password
jshannon = User("jshannon","AbC!23")
print(jshannon.username)
print(jshannon.password)
jshannon.change_pw("(i*u&y1")
print(jshannon.password)
input_user = input("What is your username? ")
print(input_user in User.list_of_usernames)
Quelle version de Python? 3.x?
Pourquoi
ISInstance (INPUT_USER, UTILISATEUR) CODE> ÊTRE ÊTREVRAI CODE>?entrée code> renvoie une chaîne (au moins dans Python 3.x)