Python類的類變量時,遇到下面的錯誤.


今天學習Python類的類變量時,遇到下面的錯誤.

class Person:

    population = 0

    def __init__(self, name):

        self.name = name

        print '(Initializeing %s)' % self.name

        Person.population += 1

 

    def __del__(self):

        print '%s says bye.' % self.name

        self.__class__.population -= 1

        if self.__class__.population == 0:

            print 'I am the last one'

        else:

            print 'There are still %d people left.' %  self.__class__.population

 

    def sayHello(self):

        if Person.population == 1:

            print 'I am the only person here.'

        else:

            print 'We have %d persons here.' % Person.population

    def howMany(self):

         if Person.population == 1:

             print 'I am the only person here.'

         else:

             print 'We have %d persons here.' % Person.population

 

p1 = Person('person1')

p1.sayHello()

xp = Person('xp')

xp.sayHello()

xp.howMany()
出現如下錯誤:

Exception AttributeError: "'NoneType' object has no attribute 'population'" in <bound method Person.__del__ of <__main__.Person instance at 0xb734040c>> ignored

xp says bye.

Exception AttributeError: "'NoneType' object has no attribute 'population'" in <bound method Person.__del__ of <__main__.Person instance at 0xb73403ec>> ignored

debian72:~/dw/pythonTest# Exception AttributeError: "'NoneType' object has no attribute 'population'" in <bound method Person.__del__ of <__main__.Person instance at 0xb734040c

原因如下:

At interpreter shutdown, the module's global variables are set to None before the module itself is released.
__del__ methods may be called in those precaries circumstances, and should not rely on any global state.
將__del__方法中對類變量的訪問方式改為如下即可:
def __del__(self): 
   self.__class__.population -= 1


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com