python - 如何用自定义 __len__() 过程替换类 @property 的 len(..) 返回值?

标签 python class python-2.7

当定义class时(ex. class MyClass),可以将其返回的内容替换为len (my_class_instance) 使用 def __len__(self)

  • 如何将其应用于下面的自定义 @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__过程替换它,因为我想先查询数据库。

我该怎么做?

最佳答案

如果您不想调用 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

关于python - 如何用自定义 __len__() 过程替换类 @property 的 len(..) 返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17818208/

相关文章:

Python:如何忽略#以使该行不是注释?

python - 深度Q-网络(DQN)学习游戏2048没有提高

c++ - 用 }; 结束类定义中的函数是否是 C++ 中的语法错误?

python - 在 Python 2.7 中获取调用者的函数对象?

python - 为什么我收到 "NameError: name ' df' 未定义”?

python - 如何从顶点列表在 SymPy 中制作多边形

c++ - 使用 C++ 时出现错误 : no matching function for call to ,

java - Java中在另一个类中创建一个类的两个对象

python - 将字符串中的每个字符替换为字典中的 float ,并将所有替换值相加

python - 在最后一个字符出现python之后获取所有内容