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.