Python: Wie man mehr als ein Argument an die Eigenschaft Getter übergibt?
Betrachten Sie das folgende Beispiel:
class A:
@property
def x(self): return 5
So, natürlich ruft die a = A(); a.x
zurück 5
Aber vorstellen, dass Sie in der Lage sein wollen, ändern Sie die Eigenschaft x.
Auf diese Weise, zum Beispiel:
class A:
@property
def x(self, neg = False): return 5 if not neg else -5
Und rufen Sie es mit a = A(); a.x(neg=True)
Erheben wird ein TypeError: 'int' object is not callable
das ist ganz normal, da unsere x
wird ausgewertet, wie 5
.
So, ich würde gerne wissen, wie man übergeben kann, mehr als ein argument an die-Eigenschaft getter, wenn es überhaupt möglich ist.
InformationsquelleAutor der Frage Rizo | 2011-04-19
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beachten Sie, dass Sie nicht haben Verwendung
property
als Dekorateur. Sie können ganz glücklich, verwenden Sie es auf die alte Weise und setzen die einzelnen Methoden zusätzlich zu der Eigenschaft:Dies kann oder kann nicht eine gute Idee sein, je nachdem, was genau du machst mit ihm (aber ich würde erwarten, um zu sehen, eine ausgezeichnete Begründung in einem Kommentar, wenn ich stieß auf dieses Muster in den code-ich war die überprüfung)
InformationsquelleAutor der Antwort ncoghlan
Ich denke, dass Sie nicht vollständig verstehen, den Sinn von Eigenschaften.
Wenn Sie eine Eigenschaft erstellen
x
werden Sie Zugriff auf Sie mitobj.x
stattobj.x()
.Nach der Erstellung der Eigenschaft, es ist nicht leicht möglich, rufen Sie die zugrunde liegende Funktion direkt.
Wenn Sie möchten, Argumente, Namen der Methode
get_x
und machen es nicht eine Eigenschaft:Wenn Sie möchten, erstellen Sie einen setter, tun Sie es wie diese:
InformationsquelleAutor der Antwort ThiefMaster
einer Eigenschaft darf nur von der auf das zugehörige Objekt. Wenn Sie wollen verwenden Sie einige externe Parameter, sollten Sie Methoden verwenden.
InformationsquelleAutor der Antwort Sepp
In Ihrem zweiten Beispiel, bist du mit
a.x()
als wenn es eine Funktion:a.x(neg=True)
. Mit diesem im Verstand, warum Sie nicht einfach definieren, es als eine Funktion?InformationsquelleAutor der Antwort NPE
Ich weiß, diese Frage ist alt, aber die Referenz, die Sie aufrufen können, Ihre Immobilie mit einem argument wie:
Als andere von anderen erwähnt, ist dies nicht empfohlen.
InformationsquelleAutor der Antwort Campi