如果定义了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。
我该怎么做?
答案 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