Reputation: 14671
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)
.
How can I apply this to a custom class
@property
in the below
scenario?
class CarWash(object):
def __init__(self):
self._queue = [1, 2, 3]
@property
def queue(self):
return self._queue
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
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