ειδα οτι το τρεχεις σε interpreter.Αν το ετρεχες κανονικα μηπως σου πεταει κ σενα οτι κ σε μενα;;
Εμένα o πρώτο σου κώδικας χτυπάει με TypeError
- Κώδικας: Επιλογή όλων
TypeError: unbound method howMany() must be called with animals instance as first argument (got nothing instead)
αλλά AttributeError όχιμετά τις αλλαγές δεν μου βγάζει error
Εσυ δηλαδή με τι το τρέχεις αν όχι με interpreter ; Έχει σημασία αυτό γιατί επιρεάζει αρκετά πράγματα όπως το περιβάλλον της python ( globals , buffer κλπ)
Το καλύτερο από όλα είναι ο idle -editor ο επίσημος της python έχει ότι χρειάζεσαι .
Όλα τα προγράμματα χρησιμοποιούν κάποιον python interpreter αλλά αλλάζουν το περιβάλλον του interpreter
Με κάποιος τρόπο ο destructor καλείται είτε από το πρόγραμμα που χρησιμοποιείς
Στο παρακάτω παράδειγμα δεν χρησιμοποιώ τον τελεστή ανάθεσης (asinment operator) άρα δεν το σώζω
σαν αποτέλεσμα από την στιγμή που εκτελείτε ο constructor ( με το __init__) αμέσως να εκτελείτε και ο destructor...
Υπάρχει δηλαδή θέμα χρονισμού κατά την διαγραφή ενός αντικειμένου για αυτό υπάρχει και o garbage collector (gc) στις γλώσσες με interpreter...
Αν και μιάζουν η builtin function del και άλλη η μέθοδος __del__ (Destructor) δεν είναι ίδιες
- Κώδικας: Επιλογή όλων
>>>>>> type (animals('Xtapodi','kafe',8).howMany()) == type(None)
phres podi
We have 0 animals.
True
Όταν καταστρέφεται επιστρέφει και τιμή None όπως και σε εσένα
οπότε πιθανόν για κάποιο λόγο ο interpreter σου δεν προλαβαίνει να διαγράψει τελείως το instance...
Περίεργο μου φένεται όλο αυτό.... για αυτό θα το δούμε και θα βρούμε και ποιο ξεκάθαρη απάντηση σιγά σιγά
Πώς εκτελείς τα προγράμματα με ποιό IDE ; μεσω ποιού προγράμματος
μήπως τα εκτελείς από κονσόλα και αν ναι πως;
Ο destructor χρησιμοποιείται __del__ με προσοχή διότι όπως λέει και στο παρακάτω κείμενο
απο την python όταν καλείται ότι exception παρουσιαστεί κάτω από το __del__ παρακάμτεται ....
http://docs.python.org/reference/datamo ... ct.__del__Warning
Due to the precarious circumstances under which __del__() methods are invoked, exceptions that occur during their execution are ignored, and a warning is printed to sys.stderr instead. Also, when __del__() is invoked in response to a module being deleted (e.g., when execution of the program is done), other globals referenced by the __del__() method may already have been deleted or in the process of being torn down (e.g. the import machinery shutting down). For this reason, __del__() methods should do the absolute minimum needed to maintain external invariants. Starting with version 1.5, Python guarantees that globals whose name begins with a single underscore are deleted from their module before other globals are deleted; if no other references to such globals exist, this may help in assuring that imported modules are still available at the time when the __del__() method is called.