Como llamar en un pionero de la propiedad de __init__
-
12-09-2019 - |
Pregunta
Tengo el siguiente trozo de código 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)
Esto debería, en teoría, imprimir el SHA1 de la contraseña, sin embargo, el establecimiento de self.password desde el constructor omite la propiedad definido y simplemente establece el valor a "contraseña1". El valor de "contraseña1" se lee en la declaración de impresión.
Sé que esto es algo a la contraseña que se define en la clase frente a la instancia, pero no estoy seguro de cómo representar correctamente por lo que funciona. Cualquier ayuda sería muy apreciada.
Solución
Una propiedad es un descriptor, y los descriptores sólo funcionan en las clases de nuevo estilo. Proveedores:
class User(object): ...
en lugar de:
class User: ...
Una buena guía para los descriptores se puede encontrar aquí .
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow