Come chiamare un setter di proprietà da __init__
-
12-09-2019 - |
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.
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