
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