Hi Folks, mittlerweile arbeite ich mich langsam in Python ein. Und da taucht für mich eine Frage auf: Wie steht es mit "privaten" Methoden innerhalb von Klassen? Gibt es so etwas? Und wenn ja, wie/wo werden diese definiert? Beispiel: 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? Schreibe ich dummy() nach __init__ in der class, dann wird dummy 5 x ausgeführt. Warum ist dies so???? Thx Timothy _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
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> _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
--On 29. Juli 2006 15:48:09 +0200 Timothy Kesten <python-liste@gmx.de> wrote:
Hi Folks,
mittlerweile arbeite ich mich langsam in Python ein. Und da taucht für mich eine Frage auf:
Wie steht es mit "privaten" Methoden innerhalb von Klassen?
Gibt es so etwas? Und wenn ja, wie/wo werden diese definiert?
So was gibt es nicht. Es gibt lediglich die Konvention, dass man die Namen von privaten Methoden mit einem oder zwei Underscores beginnt.
Beispiel:
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?
Schreibe ich dummy() nach __init__ in der class, dann wird dummy 5 x ausgeführt.
Weil Dein Code keinen Sinn macht...Was soll der dummy() Aufruf innerhalb der Klassendefinition tun? Natürlich wird die Klasse 5x instanziiert, weil Du dies in der Schleife 5mal machst. -aj _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (3)
-
Andreas Jung
-
Jochen Schulz
-
Timothy Kesten