[Python-de] private Klassenmethoden

Jochen Schulz ml at well-adjusted.de
Sam Jul 29 16:17:18 CEST 2006


Timothy Kesten:
> 
> Wie steht es mit "privaten" Methoden innerhalb von Klassen?
> 
> Gibt es so etwas? Und wenn ja, wie/wo werden diese definiert?

Gibt es nur eingeschränkt. Innerhalb von Klassen definierte Funktionen,
die mit "__" anfangen (aber nicht so aufhören) bekommen vom Interpreter
ihren Namen etwas umgeschrieben, so dass man sie nicht unter ihrem
eigentlichen Namen ansprechen kann.

Wird eher selten genutzt. Wenn Du bloß einem Programmierer zeigen
möchtest, dass er eine bestimme Methode "eigentlich" nicht direkt
aufrufen soll, lasse den Namen mit einem einfachen Unterstrich anfangen.
Ist aber nur pure Konvention.

> def dummy():
>    print "DUMMY"
> 
> class KBmain:
>     def __init__(self,line):
>         self.elements=line.split("~")
>         self.datum=self.elements[0]
>         self.kbnr=self.elements[1]
>         
>     dummy()
> 
> 
> line = "ein Text~noch ein text"  
> for i in range(1,5)
>  kb = KBmain(line)
> 
> 
> lasse ich jetzt dieses Programm laufen, dann wird dummy() nur einmal 
> ausgeführt, obwol doch KBmain 5 mal neu instanziiert wird, oder?

Ja. Aber: wenn der Interpreter auf eine Klassendefinition trifft, dann
führt er alle Anweisungen und Funktionsdefinitionen darin nur genau
einmal aus (und erstellt ein Klassenobjekt mit den enthaltenen
Funktionen).

Willst Du etwas bei jeder Instanzierung eines Objekts ausführen, mußt Du
das in der zugehörigen __init__-Methode machen. Der Klassenrumpf
definiert nur genau das, wonach er benannt ist: die Klasse. Und die gibt
es nur ein Mal.

J.
-- 
I can tell a Whopper[tm] from a BigMac[tm] and Coke[tm] from Pepsi[tm].
[Agree]   [Disagree]
                 <http://www.slowlydownward.com/NODATA/data_enter2.html>
-------------- nächster Teil --------------
Ein Dateianhang mit Binärdaten wurde abgetrennt...
Dateiname   : nicht verfügbar
Dateityp    : application/pgp-signature
Dateigröße  : 189 bytes
Beschreibung: Digital signature
URL         : http://starship.python.net/pipermail/python-de/attachments/20060729/96b1ed09/attachment.pgp


More information about the python-de mailing list