2017-06-26 5 views
0

Ich schaute auf einen Link über Python.
https://medium.com/the-renaissance-developer/python-101-object-oriented-programming-part-1-7d5d06833f26Verwendung von Setter durch Dekoratoren RecursionError

Und es gibt Dekoratoren, die dort verwendet werden, um (?) Eigenschaften und eine Setter-Methode dafür zu erstellen. Unten ist der Code:

Und das ist die Verwendung von der Verbindung als auch.

Also habe ich versucht zu verstehen, warum sollte ich es verwenden, anstatt, wissen Sie, Zugriff direkt auf die Variable selbst. Ich habe versucht, den Code auszuführen, aber ich habe RecursionError.

File "C:/Users/Brandon/Desktop/Python/tryit.py", line 16, in number_of_wheels 
    self.number_of_wheels = number 
    [Previous line repeated 491 more times] 
RecursionError: maximum recursion depth exceeded while calling a Python object 

Schließlich ist meine Frage, wie kann dieser Code Arbeit (was mit ihm vielleicht falsch?) Und was noch wichtiger ist, warum sollte ich Setter verwenden, anstatt Klassenvariable direkt den Zugriff auf?

ps. Alle Hinweise wie Links zum Lesen oder Schlüsselwörter für die Suche sind willkommen.

Antwort

1

Die Eigenschaft und das Attribut sollten nicht den gleichen Namen haben, sonst werden sich die Setter und Getter immer wieder selbst aufrufen. Herkömmlicherweise würden Sie einem führenden Unterstrich (obwohl es nicht privat ist) das Attribut voranstellen, für das Sie eine Eigenschaft erstellen.

class Vehicle(object): 
    def __init__(self, number_of_wheels, type_of_tank, seating_capacity, maximum_velocity): 
     self._number_of_wheels = number_of_wheels 
     ... 

    @property 
    def number_of_wheels(self): 
     return self._number_of_wheels 

    @number_of_wheels.setter 
    def number_of_wheels(self, number): 
     self._number_of_wheels = number 

Denken Sie auch daran object in Python 2, Unterklasse der Klasse Arbeit mit property zu machen.

Verwandte Themen