У меня есть класс, подобный следующему:
class Invoice
def __init__(self, invoice_id):
self.invoice_id = invoice_id
self._amount = None
@property
def amount(self):
return self._amount
@amount.setter
def amount(self, amount):
self._amount = amount
В приведенном выше примере, всякий раз, когда я пытался бы получить сумму счета-фактуры без указания ее значения, я получал None, например:
invoice = Invoice(invoice_id='asdf234')
invoice.amount
>> None
Но в этой ситуации None не является правильным значением по умолчанию для суммы. Я должен быть в состоянии различить значение суммы, так как значение «Нет» и значение суммы не были установлены вообще. Итак, вопрос следующий:
- Как мы обрабатываем случаи, когда свойство класса не имеет правильного значения по умолчанию? В приведенном выше примере, если я удаляю
self._amount = None
из init, я получу AttributeError для self._amount, а self.amount вернет допустимое значение только после того, как я вызову invoice.amount = 5
. Это правильный способ справиться с этим? Но это также приводит к несогласованности в состоянии объекта, поскольку приложение будет изменять свойства экземпляра во время выполнения.
- Я сохранил количество в качестве свойства для счета-фактуры для лучшего понимания и удобочитаемости счета-фактуры и его атрибутов. Должны ли свойства класса использоваться только тогда, когда нам известны его значения init / default?