[Python-de] Klasseninstanzen

Georg Mischler schorsch at schorsch.com
Wed Feb 26 09:20:11 EST 2003


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/





More information about the Python-de mailing list