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

时间:2013-07-23 18:30:33

标签: python class python-2.7

如果定义了class ex。 class MyClass),则可以使用def {{1}替换它返回len(my_class_instance)的内容}。

  • 如何将其应用于下面的自定义__len__(self) class 方案

    @property

当调用class CarWash(object): def __init__(self): self._queue = [1, 2, 3] @property def queue(self): return self._queue 时,我不希望返回列表的len,但是想用自定义len(car_wash.queue)过程替换它,因为我想先查询db。

我该怎么做?

1 个答案:

答案 0 :(得分: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