@ vor Methoden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

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.
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

Die zugehörigen Stichworte heissen Properties und Dekoratoren.
Benutzeravatar
__blackjack__
User
Beiträge: 13112
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

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)
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

@egon11: weil du die Methode im zweiten Beispiel nicht aufrufst, sondern nur an `o` zuweist.
When we say computer, we mean the electronic computer.
egon11
User
Beiträge: 354
Registriert: Mittwoch 14. Dezember 2016, 20:59

Also ruft property im Prinzip nur die Methode auf?
Benutzeravatar
sls
User
Beiträge: 480
Registriert: Mittwoch 13. Mai 2015, 23:52
Wohnort: Country country = new Zealand();

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
When we say computer, we mean the electronic computer.
Antworten