Question

Je le morceau suivant de code Python:

import hashlib

class User:
    def _set_password(self, value):
        self._password = hashlib.sha1(value).hexdigest()

    def _get_password(self):
        return self._password

    password = property(
        fset = _set_password,
        fget = _get_password)

    def __init__(self, user_name, password):
        self.password = password

u = User("bob", "password1")
print(u.password)

Cela devrait en théorie imprimer le SHA1 du mot de passe, mais la mise en self.password du constructeur ignore la propriété définie et définit simplement la valeur à « password1 ». La valeur de « password1 » est alors lu par l'instruction d'impression.

Je sais que ceci est quelque chose vers le bas mot de passe étant défini sur la classe par rapport à l'instance, mais je ne sais pas comment représenter correctement si cela fonctionne. Toute aide serait appréciée.

Était-ce utile?

La solution

Une propriété est un descripteur, et les descripteurs ne fonctionnent que sur les classes de type nouveau. Essayez:

class User(object): ...

au lieu de:

class User: ...

Un bon guide des descripteurs se trouve .

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