Seite 1 von 1

Python __Underscore__ Methods

Verfasst: Donnerstag 3. Juli 2008, 17:29
von jens
Haben bestimmt schon einige gesehen, die Sammlung der Magischen Methoden:
http://www.siafoo.net/article/57

Wäre schön, wenn es das in der offiziellen Doku geben würde...

Re: Python __Underscore__ Methods

Verfasst: Donnerstag 3. Juli 2008, 17:50
von Leonidas
jens hat geschrieben:Haben bestimmt schon einige gesehen, die Sammlung der Magischen Methoden:
http://www.siafoo.net/article/57
Ja, ich wollte es eigentlich bookmarken, aber mein Bookmarking-Service ist wie so oft down.
jens hat geschrieben:Wäre schön, wenn es das in der offiziellen Doku geben würde...
Patch einsenden? Wenn ich am nächsten Sonntag zurückkomme sollte ich wirklich mich mal dranmachen, meine Dokumentationssachen vorranzubringen.

Verfasst: Donnerstag 3. Juli 2008, 21:35
von Karl
Ich hätte zu den magischen Methoden auch mal eine Frage.
Ist es möglich, selbst so eine zu definieren?
Das habe ich mich heute Mittag bei irgend einem kleinen Script gefragt, leider weiß ich nicht mehr, was genau das war und mir fällt so auf die Schnelle auch kein sinnvolles Beispiel mehr ein.
Wahrscheinlich gibt es gar keine sinnvollen Beispiele :lol:

Edit: Sorry dass ich das Topic jetzt mal so abuse ;)

Verfasst: Donnerstag 3. Juli 2008, 21:50
von cofi
Man kann die Methoden überschreiben, warum sollte man also keine selbst erstellen können?
Es wird nur - aus verständlichen Gründen ;) - dringenst davon abgeraten.

Mir stellt sich da aber wirklich die Frage warum das denn unbedingt so aussehen muss wie die __*__ ? Haben ja schliesslich keinen Vorteil ;) Oder lieg ich da falsch?

Verfasst: Donnerstag 3. Juli 2008, 22:03
von Karl
cofi hat geschrieben:Man kann die Methoden überschreiben, warum sollte man also keine selbst erstellen können?
Es wird nur - aus verständlichen Gründen ;) - dringenst davon abgeraten.

Mir stellt sich da aber wirklich die Frage warum das denn unbedingt so aussehen muss wie die __*__ ? Haben ja schliesslich keinen Vorteil ;) Oder lieg ich da falsch?
Hmm ..
1. Wie kann man die denn dann selbst erstellen?
Also einen eigenen Operator oder eine Funktion überladen?
Wenn ich jetzt zum Beispiel 2 Datentypen habe und ich will die einfach casten können, wie zum Beispiel mit str() oder int(), wie würde das dann gehen?
Also praktisch:
type(Datentyp1(Datentyp2)) = Datentyp1
Okay das Beispiel ist schlecht, da würde man wohl einfach Datentyp1.umwandeln(Datentyp2) benutzen, aber ein eigener Operator oder so eine Umwandlungsfunktion (wie eben int()) wäre das ja auch noch nicht ganz :)
2. Warum wird denn davon abgeraten?
3. Die Unterstriche werden wohl nur deshalb existieren, damit man 1. weiterhin Methodennamen wie add() benutzen kann und 2. man direkt sieht, dass das eine magische Methode ist.

Verfasst: Donnerstag 3. Juli 2008, 22:34
von cofi
Zu 1. Ich dachte jetzt eher an eigene Klassen. Für die Built-ins musst wohl etwas tiefer ran. Aber da hab ich recht wenig Ahnung. Evtl von den Built-ins erben und dann in der Klasse die Magie schreiben ;) Aber dann sind wir wieder bei ner neuen Klasse.
Wie man die schreiben kann? Na als

Code: Alles auswählen

def __foo__(self):
bar()
;)

Zu 2. Naja es sind zum Teil vom Interpreter erstellte Attribute bzw welche mit besonderer Bedeutung. Bei den Methodens sinds dann vor allem Hooks. Ich persönlich fänds unschön ;) Aber ich denke da gibts noch tiefere Gründe.

Zu 3.1. Naa das glaub ich eher weniger da das nur nen Bennenungsproblem wäre, außerdem kann man schliesslich nen `_' anhängen - wie's PEP8 empfiehlt ;)

Zu 3.2. Da liegt wohl eher der Hund begraben.

Verfasst: Freitag 4. Juli 2008, 00:26
von Karl
Hm sorry das hab ich jetzt nicht so ganz verstanden :?: Vielleicht liegt's auch an der Uhrzeit :p

Verfasst: Freitag 4. Juli 2008, 08:59
von Darii
Karl hat geschrieben:Wenn ich jetzt zum Beispiel 2 Datentypen habe und ich will die einfach casten können, wie zum Beispiel mit str() oder int(), wie würde das dann gehen
Das hängt von deinen Datentypen ab. str und int sind übrigens keine speziellen Umwandlungsoperatoren sondern einfach nur die Klassenobjekte von int und str. Dementsprechend rufst du mit int() den Konstruktor auf.

Re: Python __Underscore__ Methods

Verfasst: Freitag 4. Juli 2008, 09:34
von birkenfeld
jens hat geschrieben:Haben bestimmt schon einige gesehen, die Sammlung der Magischen Methoden:
http://www.siafoo.net/article/57

Wäre schön, wenn es das in der offiziellen Doku geben würde...
http://docs.python.org/dev/reference/da ... thod-names kennst du aber schon, oder?

Methoden wie ``__reduce__`` findet man da zwar nicht, die gehören da aber auch nicht hin.

Verfasst: Freitag 4. Juli 2008, 10:34
von BlackVivi
Ich find' das hier am besten zum nachschlagen dieser "magischen" Methoden:

Klück

PDFs und so.