Problem bei der Freigabe über __del__
Verfasst: Freitag 1. Juni 2007, 10:13
Hallo und erstmal vielen Dank, für die vielen Antworten, die ich schon in diesem Forum gefunden habe.
Als Python-Neuling (aber mit über 20jähriger Erfahrung in Assembler und Pascal) staune ich über folgende Gegebenheit:
Der Aufruf von ModB gibt erwartungsgemäß DelB DelA aus. Wenn ich nun abcdef=ClsB() eintrage, kommt der Fehler ...None Type object has no attribute __del__ von ClsB. ClsA befindet sich also bei der Freigabe nicht mehr im Namensraum. Kann mir aber nicht vorstellen, daß die Länge des Bezeichners ausschlaggebend ist, da ich im Zusammenhang mit __del__ auch andere Merkwürdigkeiten festgestellt habe (beispielsweise eine Instanz, die nur eine Objektvariable vom Typ int enthält und bei einem negativen Wert funktioniert und bei einem positiven Wert die obengenannte Fehlermeldung ausgibt, obwohl der Wert nur in __init__ zugewiesen wird und ansonsten keine Beachtung findet - zu Testzwecken natürlich).
Ich hoffe, Ihr könnt Euch in etwa vorstellen, was ich meine. Mich würde es nähmlich nicht wundern, wenn Ihr den Fehler nicht reproduzieren könnt. Als Ausweg benutze ich gerade die folgende Variante, die ich aber nicht sehr sauber finde:
Ich nutze Python 2.5.1 mit der IDE SPE 0.8.3.c und würde mich freuen, wenn jemand eine Idee zur Problemlösung hätte.
Mit freundlichen Grüßen
Achtzig
Als Python-Neuling (aber mit über 20jähriger Erfahrung in Assembler und Pascal) staune ich über folgende Gegebenheit:
Code: Alles auswählen
# ModA.py
class ClsA:
def __init__(self)
pass
def __del__(self)
print 'DelA'
# ModB.py
from ModA import ClsA
class ClsB (ClsA):
def __init__(self)
ClsA.__init__(self)
def __del__(self)
print 'DelB'
ClsA.__del__(self)
abc=ClsB()
Ich hoffe, Ihr könnt Euch in etwa vorstellen, was ich meine. Mich würde es nähmlich nicht wundern, wenn Ihr den Fehler nicht reproduzieren könnt. Als Ausweg benutze ich gerade die folgende Variante, die ich aber nicht sehr sauber finde:
Code: Alles auswählen
class ClsB (ClsA):
...
def __del__(self)
from ModA import ClsA
print 'DelB'
ClsA.__del__(self)
Mit freundlichen Grüßen
Achtzig