Methoden <-> Klassen !?

Georg Mischler gm at licht.hl-technik.de
Sat May 9 14:25:57 EDT 1998


<thomas at mypoint.franken.de> schrieb:
Status: RO

> Hallo miteinander,
>
> ich habe hier mit dem OO-orientierten Denken etwas Schwierigkeiten, koennt
> Ihr mir evtl. etwas auf die Spruenge helfen ?

Die Schwierigkeit liegt z.T. darin, dass es keinen allgemeinen Konsens ueber
alle Details des OO Denkens gibt. Guido selber vermeidet auch schon
den Begriff selber, und nennt Python der Vorsicht halber nur "Object based"... 

>
> Ich beschaeftige mich (seit kurzen wieder mal) mit Python und habe mich
> jetzt an die Stringmethoden gemacht.
>
> Also zuerst 
> 	import string
> und dann immer 
> 	string.rstrip(neuerstring)
> u.ae.

Damit wird das Modul "string" als "first class objekt" in den Namensraum deines
eigenen Moduls eingeblendet.  Die Funktion "rstrip" ist ein Attribut dieses
Modulobjektes, und kann vorerst nur mit der voll qualifizierten Bezeichnung
angesprochen werden. Vorsicht: Der Begriff "Objekt" fuer das Modulobiekt ist
hier nicht im Sinne von "Instanz einer Klasse" zu verstehen, es handelt sich
letzten Endes lediglich um einen seperaten Namensraum.

> Nun dachte ich mir man k÷nnte es evtl. OO-maessig mit 
> neuerstring = string()
>
> und dann jeweils weiterarbeiten mit
>
> neuerstring.rstrip()
>
> Nur funktioniert das leider so nicht.
> (Ich glaube das ich hier in eine komplett falsche Richtung denke, oder ?)

Der Datentyp "string" ist in Python (aehnlich wie ein Modul) zwar
ein "first class object", aber nicht im ganz engen Sinne eine "Instanz der
Klasse String". Wenn Du den String nicht in eine selbstgebackene Klasse
einbettest, dann kannst Du ihn nur mit externen Funktionen manipulieren.
Im Python-Jargon ist ein String ein "attribute-less object". Am deutlichsten
wird das durch  folgenden Test:

>>> "abc".__methods__
Traceback (innermost last):
    File "<stdin>", line 1, in ?
AttributeError: attribute-less object

> Wie kann ich es mir nun einfacher machen, damit ich nicht immer 
> *string.methode()* aufrufen muss, sondern nur *methode()* ?
> Ich weiss es geht mit Rstrip=string.rstrip(), aber ich moechte das fuer alle
> Methoden machen die im Modul string vorhanden sind....
>
>Danke fuer die Hilfe...

Erst nochmal der Hinweis auf die unterschiedliche Terminologie: Es handelt
sich hier nicht um Methoden, sondern um ganz normale Funktionen, welche als
Attribute des Moduls "string" implementiert sind. Jetzt aber zu deiner eigentlichen
Frage: Um Namensraeume zu vereinen gibts das alternative import statement:

>>> from string import *

Anders als vorher werden damit alle Modulattribute (Variablen, Funktionen,
Klassendefinitionen) des Moduls "string" in den Namensraum deines aktuellen
eigenen Moduls *kopiert*. Aenderungen im Originalmodul zur Laufzeit kriegst
Du damit also nicht mehr mit, und Du musst aufpassen, dass Du keine
Namenskonflikte mit irgendwelchen obskuren Stringfunktionen erzeugst, aber
abgesehen davon kann es natuerlich einige Tipparbeit ersparen.


Hoffe etwas zur Verwirrung beigetragen zu haben ;)

-schorsch
[ absender-adresse kaputt - bitte gm at hl-technik.de verwenden ]

______________________________________________________________
   python-de          the German Python mailing list
send messages to:   <mailto:python-de at solar.skyport.net>
list manager: <mailto:owner-python-de at solar.skyport.net>
______________________________________________________________




More information about the Python-de mailing list