Domanda

Ho il seguente pezzo di codice 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)

Questo dovrebbe, in teoria, stampare lo SHA1 della password, tuttavia l'impostazione self.password dal costruttore ignora la proprietà definita e solo imposta il valore su "password1". Il valore di "password1" viene quindi letto dalla dichiarazione di stampa.

So che questo è qualcosa verso il basso per la password in fase di definizione della classe contro l'istanza, ma non sono sicuro come rappresentare correttamente in modo che funziona. Qualsiasi aiuto sarebbe apprezzato.

È stato utile?

Soluzione

Una proprietà è un descrittore, e descrittori di lavorare solo su classi di nuovo stile. Prova:

class User(object): ...

invece che:

class User: ...

Una buona guida per i descrittori può essere trovato qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top