Ответ 1
Я не вижу реальной проблемы с вашим кодом. В __init__
класс полностью создан и, следовательно, доступны свойства.
У меня есть класс с атрибутом, который я хочу превратить в свойство, но этот атрибут установлен в __init__
. Не знаете, как это должно быть сделано. Без настройки свойства в __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"
Но как только инициализация должна произойти в __init__
, она становится более сложной, и я не уверен в правильном курсе действий.
class STransaction(object):
"""A statement transaction"""
def __init__(self, date):
self._date = None
Странно для меня, похоже, что работает, но очень плохо пахнет.
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
Каков правильный способ настройки свойств в __init__
?
Спасибо, Арон.
Я не вижу реальной проблемы с вашим кодом. В __init__
класс полностью создан и, следовательно, доступны свойства.
class STransaction(object):
"""A statement transaction"""
def __init__(self, date):
self._date = None #1
self.date = date #2
Если вы хотите установить объект прокси self._date
, не выполняя свой сеттер, используйте строку # 1. Если вы хотите запустить setter при запуске, используйте # 2. Оба пути правильны, это всего лишь вопрос того, что вам нужно.