[PYTHON] Chaîne de méthodes avec `return self`

Quand je lisais l'open source, il y avait une méthode qui était «return self», et je ne savais pas ce qui se passerait si je faisais cela, alors prenez note.

class Car1(object):
    def __init__(self):
        self.miles = 0
        self.gas = 0

    def drive(self, d):
        self.miles += d
        self.gas -= d
        return self

    def fill(self, g):
        self.gas += g
        return self


class Car2(object):
    def __init__(self):
        self.miles = 0
        self.gas = 0

    def drive(self, d):
        self.miles += d
        self.gas -= d

    def fill(self, g):
        self.gas += g


if __name__ == '__main__':
    car1 = Car1()
    car1.fill(100).drive(50)

    print 'car1 miles', car1.miles
    print 'car1 gas', car1.gas

    car2 = Car2()
    car2.fill(100).drive(50)

    print 'car2 miles', car2.miles
    print 'car2 gas', car2.gas

résultat

car1 miles 50
car1 gas 50
Traceback (most recent call last):
File "chain.py", line 38, in <module>
car2.fill(100).drive(50)
AttributeError: 'NoneType' object has no attribute 'drive'

Ne pas retourner soi dans les méthodes de classe Une erreur se produit lors de la tentative de création d'une chaîne de méthodes sur une instance de Car2. Si vous faites return self, vous pourrez créer une chaîne de méthodes. Avec car1, vous pouvez connecter fill () ʻet drive () ʻ autant de fois que vous le souhaitez.

référence

Recommended Posts

Chaîne de méthodes avec `return self`
Comment renvoyer plusieurs index avec la méthode d'index
[Python] Méthode de calcul avec numpy
Méthode de dessin graphique avec matplotlib
Soyez prudent avec les références de méthodes faciles
Soyez prudent avec la méthode append de Python
retourne des détails d'erreur en cas d'erreur avec grpc-node
Implémentation de la méthode de différence inter-trame avec OpenCV