实例的命名出问题,相当奇怪。

实例的命名出问题,相当奇怪。

一个教程上简单的脚本

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/python
#Filename: objvar.py

class Person:
    '''Represents a person.'''
    population = 0

    def __init__(self,name):
        '''Initializes person's data.'''
        self.name=name
        print "(initializing %s)" %self.name
        #when a person is create , add it to population
        Person.population += 1

    def __del__(self):
        '''I am dying.'''
        print "%s say goodbye" %self.name
        Person.population -= 1

        if Person.population == 0:
            print "I am the last one"
        else:
            print "there're %d person left" %Person.population

    def sayHi(self):
        '''greeting by the people.'''
        print "Hi, My name is %s" %self.name

    def count_person(self):
        '''print the number of people'''
        if Person.population == 1:
            print "i am the only one person"
        else:
            print "there're %d of people now" %Person.population

aries = Person("aries")
aries.sayHi()

这样就会报错

[Copy to clipboard] [ - ]
CODE:
Exception exceptions.AttributeError: "'NoneType' object has no attribute 'population'" in <bound method Person.__del__ of <__main__.Person instance at 0xb7d7998c>> ignored

但是如果代码的最后的实例名字只要不是aries,都没有这个问题,实在是想不通。
你这个程序我在windows上运行没有问题啊!本身就没有问题!不过我是菜鸟,还有待高手指教!
__del__是当自动垃圾回收时python来调用的,建议还是不要使用。
直接del xxxx是没有问题的,网上也说__del__这个回收内存的时候会出现一些意外。不过既然__del__有问题,python为什么还用这个东西呢?
我也不知道。不过我看过许多的代码,基本上没有人使用__del__
感同身受。

今天遇见lz的问题,一样的例程,一样的报错。

跟奇怪的是,当我把源代码copy过来的时候就不报错。
我把我的del跟源代码调换,也不报错。是因为实例名字的问题么,也就是说del本身不稳定?

期待大人指点呵呵