Ho una classe con un attributo che desidero trasformare in una proprietà, ma questo attributo è impostato su __init__
. Non sono sicuro di come dovrebbe essere fatto. Se non si imposta la propert in __init__
questo è facile e funziona beneCome impostare una proprietà python in __init__
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"
Ma una volta che l'inizializzazione deve avvenire in __init__
diventa più complicato e non sono sicuro della corretta linea di condotta.
class STransaction(object):
"""A statement transaction"""
def __init__(self, date):
self._date = None
Stranamente per me, il seguente sembra funzionare ma ha un cattivo odore.
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
Qual è il modo corretto per andare sull'impostazione delle proprietà in __init__
?
Grazie, aaron.
In generale, c'è qualche motivo per impostare 'self._date = None' prima di aggiornare la proprietà poiché verrà immediatamente sovrascritta con il nuovo valore? –
No. Ha senso solo se la seconda linea è assente per impedire che il getter venga chiamato senza attributo "_date" impostato – nerdoc