最大递归深度超过getter Django



我有一些特定attr的自定义getter类:

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)

此代码引发RunetimeError: maximum recursion depth exceeded while calling a Python object但是当我使用这段代码时:

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)

一切都如我所愿。

因为__getattribute__在执行self.custom_getter时被调用。您可以使用self.__dict__。如何使用__getattribute__方法?

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)

最新更新