Seite 1 von 1

@ vor Methoden

Verfasst: Mittwoch 1. April 2020, 17:24
von egon11
Ich habe des öfteren ein @ im Zusammenhang von setter und getter Methoden gesehen.
Z:B.

Code: Alles auswählen

@property
getter_funktion():
.
.
.
Was macht das genau, konnte dazu nichts wirklich aufschlussreichen finden.

Re: @ vor Methoden

Verfasst: Mittwoch 1. April 2020, 18:13
von kbr
Die zugehörigen Stichworte heissen Properties und Dekoratoren.

Re: @ vor Methoden

Verfasst: Mittwoch 1. April 2020, 19:03
von __blackjack__
@egon11: Wo hast Du denn gesucht? `property()` ist dokumentiert. Da steht dann auch das man es als Decorator verwenden kann und ein Beispiel mit dem @. Das Wort „decorator“ ist ein Link zum Glossar-Eintrag, wo das kurz erklärt wird, mit Beispiel wie der gleiche Code ohne Decorator aussehen würde, und es gibt Links zur Dokumentation von Funktions- und Klassemdefinitionen wo auch noch mal etwas dazu steht.

Zu den letztgenannten Links kommt man auch über den Index wenn man dort den"@"-Eintrag sucht.

Re: @ vor Methoden

Verfasst: Samstag 4. April 2020, 07:30
von egon11
Vielen Dank.
Aber was ich noch nicht verstehe, warum funktioniert

Code: Alles auswählen

class P:
    def __init__(self,x):
        self.__x = x

    def getX(self):
        return self.__x

    def setX(self, x):
        self.__x = x

    o = property(getX)
print(P(2).o)
aber nicht wenn ich einfach statt property die Methode selbst aufrufe?

Code: Alles auswählen

class P:
    def __init__(self,x):
        self.__x = x

    def getX(self):
        return self.__x

    def setX(self, x):
        self.__x = x

    o = getX
print(P(2).o)

Re: @ vor Methoden

Verfasst: Samstag 4. April 2020, 07:44
von sls
@egon11: weil du die Methode im zweiten Beispiel nicht aufrufst, sondern nur an `o` zuweist.

Re: @ vor Methoden

Verfasst: Samstag 4. April 2020, 07:52
von egon11
Also ruft property im Prinzip nur die Methode auf?

Re: @ vor Methoden

Verfasst: Samstag 4. April 2020, 08:00
von sls
egon11: `property` ist für einen sogenannten Datendeskriptor gedacht der Funktions / Methodenaufrufe auslöst wenn du auf ein entsprechendes Attribut zugreifst.

Vielleicht solltest du gleich die Dokumentation bemühen, da wird das besser beschrieben: https://docs.python.org/3/howto/descrip ... properties