Форум сайта python.su
0
Здравствуйте! Помогите пожалуйста со следующей проблемой.
Есть класс:
class Order():
def __init__(self, discount, total_price, date):
self.discount = discount
self.total_price = total_price
self.date = date
Отредактировано megoloman (Март 22, 2016 16:53:12)
Офлайн
24
>>> class A: ... def __init__(self, value): ... self.__value = value ... @property ... def value(self): ... return self.__value ... @value.setter ... def value(self, new_value): ... if 0 < new_value < 99: ... self.__value = new_value ... else: ... raise ValueError
Офлайн
0
Добавил:
class Order():
def __init__(self, discount, total_price, date):
self.discount = discount
self.total_price = total_price
self.date = date
@property
def discount(self):
return self.discount
@discount.setter
def discount(self, set_discount):
if 0 < set_discount < 99:
self.discount = set_discount
else:
raise ValueError
order = Order(1,2,3)
File "untitled.py", line 30, in discount
self.discount = set_discount
File "untitled.py", line 30, in discount
self.discount = set_discount
File "untitled.py", line 30, in discount
self.discount = set_discount
File "untitled.py", line 30, in discount
self.discount = set_discount
File "untitled.py", line 30, in discount
self.discount = set_discount
File "untitled.py", line 30, in discount
self.discount = set_discount
File "untitled.py", line 30, in discount
self.discount = set_discount
RuntimeError: maximum recursion depth exceeded
Офлайн
221
megoloman
вы не внимательны к деталям:
class Order: def __init__(self, discount, total_price, date): self.__discount = discount self.total_price = total_price self.date = date @property def discount(self): return self.__discount @discount.setter def discount(self, set_discount): if 0 < set_discount < 99: self.__discount = set_discount else: raise ValueError
Офлайн
0
Исправил, ошибка исчезла:
class Order(list):
def __init__(self, discount, total_price, date):
self.discount = discount
self.total_price = total_price
self.date = date
@property
def set_discount(self):
return self.discount
@set_discount.setter
def set_discount(self, new_discount):
if 0 < new_discount < 99:
self.discount = new_discount
else:
raise ValueError
0 < new_discount < 99
Отредактировано megoloman (Март 22, 2016 21:33:05)
Офлайн
24
Покажите код как устанавливаете значение, не может такого быть.
Отредактировано ayb (Март 22, 2016 21:54:43)
Офлайн
0
order = Order(102,2,3)
order.discount = 103
Офлайн
24
Вы вообще понимаете что такое property и как это работает ?
Офлайн
0
видимо не совсем( можете объяснить?
Офлайн
24
Вы можете объяснить зачем Вам property ? Установку атрибута можно контролировать в методе __setattr__
Офлайн