Python - Property setting from list causes maximum recursion depth exceeded -
i have following class:
class vehicle(object): def __init__(self, name): self.name = name self.kinds_list = ["tank", "car", "motorbike", "bike", "quad" ] @property def kind(self): return self.kind @kind.setter def kind(self, x): if x in self.kinds_list: self.kind = x else: raise attributeerror('no attribute {0} found !'.format(y))
setting kind causes maximum recursion depth exceeded aka stack overflow.
q: how re-write setter make work fixed list only?
the reason reached maximum recursion depth inside setter, self.kind = ...
, recursively calls same setter. should store value private attribute, rename self.kind
self._kind
.
class vehicle(object): def __init__(self, name): self.name = name self.kinds_list = ["tank", "car", "motorbike", "bike", "quad" ] @property def kind(self): return self._kind @kind.setter def kind(self, x): if x in self.kinds_list: self._kind = x else: raise valueerror('{0} illegal kind of vehicle!'.format(y))
this not real private attribute in other languages, since nothing prevents accessing my_vehicle._kind
. convention in python, starting underscore private , shouldn't touched outside of class. or as say: python consenting adults ;).
i modified error message in setter.
Comments
Post a Comment