2016-10-12 2 views
1

Ich habe einige Klasse mit benutzerdefinierten Getter für spezifische attr:maximale Rekursionstiefe überschritten Getter Django

class Item(a, b, c, d, models.Model): 
    title = Field() 
    description = Field() 
    a = Field() 
    _custom_getter = ['title','description'] 

    def __getattribute__(self, name): 
     if name in self.custom_getter: 
      return 'xxx' 
     else: 
      return super(Item, self).__getattribute__(name) 

dieser Code erhöhen RunetimeError: maximum recursion depth exceeded while calling a Python object aber wenn ich Sie mit diesem Stück Code:

class Item(a, b, c, d, models.Model): 
    title = Field() 
    description = Field() 
    a = Field() 

    def __getattribute__(self, name): 
     custom_getter = ['title','description'] 
     if name in custom_getter: 
      return 'xxx' 
     else: 
      return super(Item, self).__getattribute__(name) 

Alles funktioniert wie ich will. Wo ist mein Fehler im ersten Code?

Antwort

3

Da __getattribute__ wird aufgerufen, wenn Sie self.custom_getter tun. Sie können dazu self.__dict__ verwenden. Lesen Sie mehr How is the __getattribute__ method used?

class Item(a, b, c, d, models.Model): 
    title = Field() 
    description = Field() 
    a = Field() 
    custom_getter = ['title','description'] 

    def __getattribute__(self, name): 
     if name in self.__dict__['custom_getter']: 
      return 'xxx' 
     else: 
      return super(Item, self).__getattribute__(name) 
+0

Ich benutze 'Objekt .__ getAttribute __ (self, '_custom_getter')' statt 'self .__ dict __ [ '_ custom_getter']', weil sie denselben Fehler erzeugen, aber danke für Artikel, fand ich Lösung ther. – gargi258

Verwandte Themen