如何用自定义__len __()过程替换class @ property的len(..)return?

Phi*_*hil 2 python class python-2.7

class定义a(例如 class MyClass)时,可以替换它返回到 len(my_class_instance)使用def的内容__len__(self).

  • 如何class @property在以下场景中将其应用于自定义?

    class CarWash(object):
        def __init__(self):
            self._queue = [1, 2, 3]
    
        @property
        def queue(self):
            return self._queue
    
    Run Code Online (Sandbox Code Playgroud)

len(car_wash.queue)调用时,我不希望返回列表的len但是想用自定义__len__过程替换它,因为我想首先查询db.

我怎样才能做到这一点?

Eri*_*ric 5

如果您不想list.__len__被呼叫,请不要返回列表:

def CarQueue(list):
    def __len__(self):
        return something_dubious()
    # if you're going to override len, make sure to overide `__iter__`
    # and `__getitem__`

class CarWash(object):
    def __init__(self):
        self._queue = CarQueue([1, 2, 3])

    @property
    def queue(self):
        return self._queue
Run Code Online (Sandbox Code Playgroud)