2

class定义a 时(例如 ),可以使用 defclass MyClass替换它返回的内容 。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(car_wash.queue)被调用时,我不希望返回列表的 len 但想用自定义__len__过程替换它,因为我想先查询数据库。

我怎样才能做到这一点?

4

1 回答 1

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
于 2013-07-23T18:32:46.827 回答