
Hallo.
Das ist auch richtig so. Voraussetzung ist allerdings, dass bei der Erzeugung der Instanz alle vom Konstruktor __init__() erwarteten Parameter mitgeliefert werden. Das erste Argument (self) wird automagisch von der Instanz selber beigesteuert, alle weiteren (in deinem Fall "file") müssen im Aufruf enthalten sein.
Danke, das hat schon mal weitergeholfen. Doch daraus ergibt sich gleich die naechste Frage.... Was passiert wenn ich die Variable 'file' in der Klasse definiere, vor der __init__ Funktion? class ConvertFile: file = "blah" def __init__(self, file): ++++++++++++++++++++ myConverter = ConvertFile( ) Das kann ich auf keinen Fall benutzen, wenn ich in der __init__ weitere Parameter ausser self benutze?
Noch ein stilistischer Nachtrag: Es wird nicht empfohlen, eigene Modulnamen mit Unterstrichen zu beginnen. Es ist Konvention, Erweiterungsmodule in C, auf welche nur ueber einen Wrapper in Python zugegriffen wird, so zu benennen. Ein Beispiel ist z.B. das Standard-Modul socket, welches intern auf das Erweiterungsmodul _socket zurueckgreift.
Gut zu wissen. Bin noch sehr neu im Umgang mit Python und deswegen auch sehr dankbar fuer Tipps und Hinweise. Danke Robert _______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de

robert schneider wrote:
Doch daraus ergibt sich gleich die naechste Frage.... Was passiert wenn ich die Variable 'file' in der Klasse definiere, vor der __init__ Funktion?
class ConvertFile: file = "blah" def __init__(self, file):
Damit definierst du ein Attribut fuer die Klasse, das dann allen Instanzen gemeinsam zum Lesen zur Verfuegung steht, wie wenn es ein Attribut der jeweiligen Instanz waere. Wenn du allerdings in einer Methode eine Variable gleichen Namens mit einem Wert belegst, dann erzeugst du ein neues Attribut der spezifischen Instanz, welches das Attribut der Klasse "verdeckt". Um das Klassen-Attribut zu aendern, musst du in jedem Fall die Klasse in der Zuweisung direkt angeben: class ConvertFile: file = "Klassen-Attribut" # Attribut der Klasse def __init__(self, file): print ' file:', file print ' self.file:', self.file print 'Erzeuge self.file in Instanz' self.file = 'Instanz-Attribut' print ' self.file:', self.file # verdeckt print ' ConvertFile.file:', ConvertFile.file print 'Aendere Klassen-Attribut' ConvertFile.file = 'Neues Klassen-Attribut' print ' self.file:', self.file # verdeckt print ' ConvertFile.file:', ConvertFile.file print 'Entferne self.file aus Instanz' del self.file print ' self.file:', self.file # unverdeckt print ' ConvertFile.file:', ConvertFile.file x = ConvertFile('Argumentwert')
myConverter = ConvertFile( )
Das kann ich auf keinen Fall benutzen, wenn ich in der __init__ weitere Parameter ausser self benutze?
Wozu setzt du dort einen Parameter rein, wenn du ihn nachher gar nicht mit einem Argument versorgen willst? Natuerlich kannst du auch Parameter mit Vorgabewerten belegen, wodurch das jeweilige Argument dann optional wird: def __init__(self, file='Vorgabewert'): ... oder auch: def __init__(self, file=None): if file == None: file = ConvertFile.file ... Alle Klarheiten beseitigt? ;) -schorsch -- Georg Mischler -- simulations developer -- schorsch at schorsch com +schorsch.com+ -- lighting design tools -- http://www.schorsch.com/ _______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de

Am Wed, 26 Feb 2003 14:29:46 +0100 Schrieb robert schneider <mariachi@gmx.ch>:
Hallo.
Was passiert wenn ich die Variable 'file' in der Klasse definiere, vor der __init__ Funktion?
class ConvertFile: file = "blah" def __init__(self, file):
++++++++++++++++++++
myConverter = ConvertFile( )
Das kann ich auf keinen Fall benutzen, wenn ich in der __init__ weitere Parameter ausser self benutze?
Hallo Robert, so wie du es schreibst, ist file ein Attribut der Klasse, nicht der instanz, file ist in dem Falle für alle Instanzen identisch und wird bei einer Änderung auch für alle Instanzen geändert. in der __init__ Methode wird file als Parameter benutzt. Soll file als Attribut der Instanz verwendet werden muss es heißen self.file wobei self stellvertretend für die jeweilige Instanz gilt. Du kannst aber auch Parameter einer Methode/Funktion mit Werten vorbelegen z.B. class ConvertFile: def __init__(self, file="blah"): print file
myConverter = ConvertFile() blah myConverter = ConvertFile("not_blah") not_blah
Gruß Dookie _______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de

Hallo schorsch, hallo Dookie Fuers erste bin ich aufgeklaert ueber dieses Thema :-)) Danke euch fuer die Ausfuehrlichkeit. Gruesse Robert _______________________________________________ Python-de maillist - Python-de@starship.python.net http://starship.python.net/mailman/listinfo/python-de
participants (3)
-
Fritz Cizmarov
-
Georg Mischler
-
robert schneider