property objects define decorators and python properties

objects - Cómo establecer una propiedad de python en__init__



python get and set attributes (2)

Tengo una clase con un atributo que deseo convertir en una propiedad, pero este atributo se establece dentro de __init__ . No estoy seguro de cómo se debe hacer esto. Sin configurar la propiedad en __init__ esto es fácil y funciona bien

import datetime class STransaction(object): """A statement transaction""" def __init__(self): self._date = None @property def date(self): return self._date @date.setter def date(self, value): d = datetime.datetime.strptime(value, "%d-%b-%y") self._date = d st = STransaction() st.date = "20-Jan-10"

Pero una vez que la inicialización tiene que ocurrir en __init__ se vuelve más complicada y no estoy seguro del curso de acción correcto.

class STransaction(object): """A statement transaction""" def __init__(self, date): self._date = None

Extrañamente para mí, lo siguiente parece funcionar pero huele muy mal.

class STransaction(object): """A statement transaction""" def __init__(self, date): self._date = None self.date = date @property def date(self): return self._date @date.setter def date(self, value): d = datetime.datetime.strptime(value, "%d-%b-%y") self._date = d

¿Cuál es la forma correcta de establecer propiedades en __init__ ?

Gracias, Aaron.


No veo ningún problema real con su código. En __init__ , la clase está totalmente creada y, por lo tanto, las propiedades son accesibles.


class STransaction(object): """A statement transaction""" def __init__(self, date): self._date = None #1 self.date = date #2

Si desea configurar el objeto proxy self._date sin ejecutar su configurador, use la línea # 1. Si desea ejecutar el setter al inicio, use también el # 2. Ambas formas son correctas, es solo una cuestión de lo que necesita.