2016-06-03 8 views
-1

hier ist mein CodeWarum Destruktor-ID-Nachricht erneut in Python drucken?

class third: 

    def __init__(self): 
     print("Cons is called") 

    def __del__(self): 
     print("desc is called") 

    def setName(self,firstName,lastName): 
     self.firstName=firstName; 
     self.lastName=lastName; 

    def displayName(self): 
     print(self.firstName,' ' ,self.lastName) 

ob=third(); 
ob.setName('gaurav','sharma'); 
ob.displayName() 
ob.__del__() 
ob.displayName(); 

und Ausgang ist

Cons is called 
    gaurav sharma 
    desc is called 
    gaurav sharma 
    desc is called 

i unter Verwendung del Objekt zerstört und dann versucht, wieder display Funktion aufrufen, noch wird sie distroyed Werte bieten und jetzt verwirrt Wetter im die Objekt ist Destroid oder nicht.

+0

'__del__' ist wie jede andere Methode, wenn direkt aufgerufen. – Daniel

+0

'__del __()' wird bei jeder Zerstörung der Instanz aufgerufen. Der Aufruf von '__del __()' zerstört das Objekt self nicht – qvpham

+0

Beachten Sie, dass es keine Pythonic ist, wenn Sie Setter und Getter verwenden - benutzen Sie '@ property'. – jonrsharpe

Antwort

1

Sie sollten __del__() nicht direkt aufrufen, da es nur diese Methode ausgeführt wird, aber das Objekt nicht tatsächlich gelöscht werden. Verwenden Sie die del Anweisung, um ein Objekt zu löschen:

>>> del ob 
>>> ob 
>>> NameError: name 'ob' is not defined 
+1

'del' ist keine Funktion, also bitte keine Klammern. – Daniel

+0

@Daniel Sie haben Recht, behoben. Danke für die Köpfe hoch. – Selcuk

+0

vielen Dank :) – Tiger