Как установить свойство python в __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__?

Спасибо, Арон.

Ответ 1

Я не вижу реальной проблемы с вашим кодом. В __init__ класс полностью создан и, следовательно, доступны свойства.

Ответ 2

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

Если вы хотите установить объект прокси self._date, не выполняя свой сеттер, используйте строку # 1. Если вы хотите запустить setter при запуске, используйте # 2. Оба пути правильны, это всего лишь вопрос того, что вам нужно.