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

Python __Underscore__ Methods

Beitragvon jens » Donnerstag 3. Juli 2008, 17:29

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Python __Underscore__ Methods

Beitragvon Leonidas » Donnerstag 3. Juli 2008, 17:50

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

Beitragvon Karl » Donnerstag 3. Juli 2008, 21:35

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

Beitragvon cofi » Donnerstag 3. Juli 2008, 21:50

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

Beitragvon Karl » Donnerstag 3. Juli 2008, 22:03

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

Beitragvon cofi » Donnerstag 3. Juli 2008, 22:34

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

Beitragvon Karl » Freitag 4. Juli 2008, 00:26

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

Beitragvon Darii » Freitag 4. Juli 2008, 08:59

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

Re: Python __Underscore__ Methods

Beitragvon birkenfeld » Freitag 4. Juli 2008, 09:34

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/datamodel.html#special-method-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:

Beitragvon BlackVivi » Freitag 4. Juli 2008, 10:34

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

Klück

PDFs und so.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder