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

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -