Phil
Phil

Reputation: 14671

How can I replace a class @property's len(..) return with a custom __len__() procedure?

When a class is defined (ex. class MyClass), it is possible to replace what it returns to a len(my_class_instance) using def __len__(self).

when len(car_wash.queue) is called, I don't want the list's len to be returned but would like to replace it with a custom __len__ procedure, since I want to query the db first.

How can I do this?

Upvotes: 2

Views: 100

Answers (1)

Eric
Eric

Reputation: 97641

If you don't want list.__len__ to be called, don't return a list:

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

Upvotes: 5

Related Questions