Python __Underscore__ Methods

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
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

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 ;)
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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?
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

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.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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.
Karl
User
Beiträge: 252
Registriert: Freitag 29. Juni 2007, 17:49

Hm sorry das hab ich jetzt nicht so ganz verstanden :?: Vielleicht liegt's auch an der Uhrzeit :p
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

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.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

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.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Ich find' das hier am besten zum nachschlagen dieser "magischen" Methoden:

Klück

PDFs und so.
Antworten