Δημοσιεύτηκε: 24 Μαρ 2011, 03:31
από sokoban4ever
έγραψε:γιατι αν βγαλω τα 2 del οταν το τρεχω μου πεταει; αυτα;;;;

Ποιά έκδοση pyhton χρησιμοποιείς;
σε python 2.6 και 3.1 τουλάχιστον δουλεύει άψογα και όπως το έχεις
μήπως δουλέυεις σε καμια debug ή έχεις κάνεις custum compile ;
Όπως και να έχει (απο την 2.4 και μετά) θα σου είναι πιο έυκολο να βάζεις staticmethod με (@) function decorator
http://docs.python.org/library/function ... lassmethod
Για staticmethod Δες εδώ
http://docs.python.org/library/function ... aticmethod

Spoiler: show
Κώδικας: Επιλογή όλων
>>> class animals:
posotita = 0
def __init__(self,onoma,xrwma,podia):
self.onoma=onoma
self.xrwma=xrwma
self.podia=podia
animals.posotita += 1

def __del__(self):
animals.posotita -=1
print ('phres podi')

@staticmethod
def howMany():
print ('We have {0:d} animals.'.format(animals.posotita))

>>> pipi = animals('lala','lalo',4)
>>> pipo = animals('papa','papi',4)
>>> animals.howMany()
We have 2 animals.
>>> del pipi
phres podi
>>> del pipo
phres podi
>>> animals.howMany()
We have 0 animals.
>>> #Σημείωση !!! εδώ η __del__ καλείται αυτόματα για αποδεύμεση χώρου κλπ και η pipi instance (εκδοχή ) ξαναφτιάνεται από τις στάχτες της
>>> pipi = animals('lala','lalo',4)
>>> pipi = animals('lala','lalo',4)
phres podi
>>> animals.howMany()
We have 1 animals.
>>> #


ένας άλλος τρόπος είναι αυτός με την classmethod
http://docs.python.org/library/function ... lassmethod
πχ
Spoiler: show
Κώδικας: Επιλογή όλων
class animals:
posotita = 0
def __init__(self,onoma,xrwma,podia):
self.onoma=onoma
self.xrwma=xrwma
self.podia=podia
animals.posotita += 1

def __del__(self):
animals.posotita -=1
print ('phres podi')

@classmethod
def howMany(self):
print ('We have {0:d} animals.'.format(self.posotita))
#print ('We have {0:d} animals.'.format(animals.posotita))


>>> pipi = animals('lala','lalo',4)
>>> pipo = animals('papa','papi',4)
>>> animals.howMany()
We have 2 animals.
>>> del pipo
phres podi
>>> del pipi
phres podi
>>> animals.howMany()
We have 0 animals.



έγραψε:πρεπει οπωσδηποτε να τα καλουμε εφοσον εχουμε ορισει __del__ ;;

Όχι δεν πρέπει.

και τέλος για το None δες εδώ
http://docs.python.org/library/constant ... =none#None
Στην περίπτωση σου επέστρεψε τιμή None από NoneType object
πχ
Κώδικας: Επιλογή όλων
>>>>>> type (animals('Xtapodi','kafe',8).howMany()) == type(None)
phres podi
We have 0 animals.
True
>>>type (animals('Xtapodi','kafe',8).howMany())
phres podi
We have 0 animals.
<type 'NoneType'>

Ίσως να είναι καλύτερα... να αποφεύγεις τα τυχαία ονόματα (όπως pipo papi papa popa )
γιατί μπερδεύουν όχι μόνο εσένα
:)