Python – Eigenschaftseinstellung aus der Liste verursacht maximale Rekursionstiefe überschritten

Ich habe folgende Klasse:

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)) 

Einstellen der Art verursacht die maximale Rekursionstiefe überschritten aka Stapelüberlauf.

F: Wie kann ich den Setter neu schreiben, damit er nur mit fester Liste funktioniert?

One Solution collect form web for “Python – Eigenschaftseinstellung aus der Liste verursacht maximale Rekursionstiefe überschritten”

Der Grund, warum du die maximale Rekursionstiefe erreicht hast, ist, dass du in deinem Setter dich selbst macht self.kind = ... , was rekursiv den selben Setter anruft. Sie sollten den Wert als ein privates Attribut speichern, benennen self.kind einfach self.kind zu 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} is an illegal kind of vehicle!'.format(y)) 

Dies ist kein echtes privates Attribut wie in anderen Sprachen, da nichts Sie daran hindert, auf my_vehicle._kind zuzugreifen. Nach Konvention in Python ist alles, was mit einem Unterstrich beginnt, privat und sollte normalerweise nicht außerhalb der Klasse berührt werden. Oder wie sie sagen : python ist für die Zustimmung von Erwachsenen;).

Ich habe auch die Fehlermeldung im Setter etwas geändert.

  • Warum gibt meine rekursive Funktion keine?
  • Wie man sogar und ungerade Zahlen eines Arrays mit Rekursion summiert
  • Refactoring rekursive "Vorkommen von" Funktion
  • Rekursiv dekrementieren eine Liste durch 1
  • Rekursionsfunktion funktioniert nicht richtig
  • Den längsten Teilstring in alphabetischer Reihenfolge finden
  • Python-Rekursions-Permutationen
  • Baktracking-Funktion, die die Berechnung berechnet, überschreitet die maximale Rekursionstiefe
  • Trennungsliste mit Rekursion
  • Ist es möglich, die Rekursion aus dieser Funktion zu entfernen?
  • Rekursive dircmp (vergleiche zwei Verzeichnisse, um sicherzustellen, dass sie die gleichen Dateien und Unterverzeichnisse haben)
  • Python ist die beste Programmiersprache der Welt.