Я довольно новичок в python, и я решил создать модуль для управления моим ежемесячным бюджетом в качестве учебного случая. Основной объект в модуле будет дебет, определяется какмаксимальная рекурсия превышена при вызове атрибута объекта
class Debit(object):
currency = "SEK"
def __init__(self,date,tag,ammount):
self.date = date
self.tag = tag
self.ammount = ammount
Я хотел, чтобы иметь возможность контролировать, что атрибут этого объекта введены правильно, и сделать так что я пытался играть со свойствами, как это
@property
def date(self):
return self.date
@date.setter
def date(self, d):
if len(d) == 0:
raise Exception("Date cannot be empty")
self.date = d
NB: состояние и исключение в date.setter будет изменено в нечто более актуальным, я просто хотел попробовать исключение Это работает только наполовину: в самом деле, если я пытаюсь ввести пустой строка для даты, я получил исключение. Тем не менее, когда я вхожу в правильную дату, а затем я попытался получить с помощью .date я получил следующее сообщение об ошибке
RuntimeError: maximum recursion depth exceeded
Я полагаю, что я делаю что-то плохое, называя «дата» в свойствах и сеттер, заставляя python в бесконечный цикл, но я не могу его обвести.
Любая помощь?
дата называет себя рекурсивным. введите данные даты еще что-то вроде '_date' – syntonym
Вы имеете в виду при инициализации объекта или внутри свойства и сеттера? –
Всякий раз, когда вы обращаетесь к объекту object.date, вызывается функция 'def date (self)'. Поэтому, когда вы получаете доступ к self.date внутри этого ... вызывается 'date (self)'. Вы должны каким-то образом различать получателя и данные, которые он получает. Это часто делается путем наименования фактических данных '_data', так что, когда вы возвращаете' self._data', он не * вызывает 'date (self)'. – syntonym