There is no remaining referent to your class at the point when the
last instance has started to be deleted. This allows the class itself
to be garbage collected. Changing the code to the following will
prevent this.
#!/usr/bin/python
class Person:
population = 0
def __init__(self, name):
self.name = name
print '%s has been added' %self.name
Person.population += 1
def __del__(self):
print '%s is leaving' % self.name
Person.population -= 1
print 'population = %d' %Person.population
cls = Person
p = Person('Jean')
d = Person('Michael')
--Michael
On Thu, Jun 5, 2008 at 4:14 PM, Blaise Morose <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I have this silly piece of code that I am experimenting with:
>
> #!/usr/bin/python
>
> class Person:
> population = 0
>
> def __init__(self, name):
> self.name = name
> print '%s has been added' %self.name
>
> Person.population += 1
>
> def __del__(self):
> print '%s is leaving' % self.name
>
> Person.population -= 1
>
> print 'population = %d' %Person.population
>
>
> p = Person('Jean')
> d = Person('Michael')
>
> Output:
>
> Jean has been added
> Michael has been added
> Michael is leaving
> population = 1
> Jean is leaving
> Exception exceptions.AttributeError: "'NoneType' object has no attribute
> 'population'" in <bound method Person.__del__ of <__main__.Person instance
> at 0xb7dadacc>> ignored
>
> So once all objects have been destroyed, an exception is triggered on class
> variable 'population'.
>
> Any more logical explanation and work around? I just need to understand what
> python is doing here
>
> Thx
>
> Blaise
>
>
>
>
> _______________________________________________
> Tutor maillist - [email protected]
> http://mail.python.org/mailman/listinfo/tutor
>
>
--
Michael Langford
Phone: 404-386-0495
Consulting: http://www.RowdyLabs.com
_______________________________________________
Tutor maillist - [email protected]
http://mail.python.org/mailman/listinfo/tutor