-2
votes

InstanceOf - Utilisation de classes pour simuler l'accès du système

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? XXX


2 commentaires

Quelle version de Python? 3.x?


Pourquoi ISInstance (INPUT_USER, UTILISATEUR) ÊTRE ÊTRE VRAI ? entrée renvoie une chaîne (au moins dans Python 3.x)


3 Réponses :


1
votes

Si vous utilisez Python 3.x (que je vais supposer), Entrée renvoie une chaîne de sorte que isinstance (INPUT_USER, utilisateur) sera toujours < code> faux .

Vous devrez garder une trace de tous les objets d'objets créés et recherchez l'objet avec le nom entré.

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é: xxx

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 appartiennent même à la classe Classe Classe Indice: probablement pas ). 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 self.username vers une propriété mais je suppose que c'est hors de portée de ce Q & A.


0 commentaires

3
votes

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 utilisateur et utilisez la chaîne d'entrée vers Rechercher un utilisateur correspondant. xxx

Notez que cela ne convient bien que comme projet de jouet bien sûr.


2 commentaires

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 construction dans userscollection.get au lieu de renvoie self._users.get (nom d'utilisateur) ? 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 (fait BTW, merci de repérer cela).



0
votes

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 list_of_usernames = [] code> et ensuite dans __ init __ () code> annexe nom d'utilisateur au list_of_usernames code> et à la fin xxx pré>

afin que votre code ressemblera à ce code p >

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)


0 commentaires