2

aclassが定義されている場合 ( class MyClass)、それが返すものを len(my_class_instance)using defに置き換えることができます__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 に答える