[PYTHON] Methodenkette mit `return self`

Als ich Open Source las, gab es eine Methode, die "Selbst zurückgeben" war, und ich wusste nicht, was passieren würde, wenn ich das tun würde. Machen Sie sich also eine Notiz.

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

Ergebnis

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'

Geben Sie in Klassenmethoden nicht "self" zurück. Beim Versuch, eine Methodenkette für eine Instanz von "Car2" durchzuführen, tritt ein Fehler auf. Wenn Sie "self zurückgeben", können Sie eine Methodenkette erstellen. Mit car1 können Sie fill () unddrive ()beliebig oft verbinden.

Referenz

Recommended Posts

Methodenkette mit `return self`
So geben Sie mit der Indexmethode mehrere Indizes zurück
[Python] Berechnungsmethode mit numpy
Diagrammzeichnungsmethode mit matplotlib
Seien Sie vorsichtig mit einfachen Methodenreferenzen
Seien Sie vorsichtig mit Pythons Append-Methode
Rückgabe von Fehlerdetails bei Fehler mit grpc-node
Implementierte Inter-Frame-Differenzmethode mit OpenCV