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.

¿Fue útil?

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
scroll top