Q
QS
Hi to all!
I am new to python, and I encountered a weird problem.
Here is my code
##########>8####################
#!/usr/bin/python
# Filename: objvar.py
class Person:
'''Represents a person.'''
population = 0
#sex = 'F'
#age = 22
# It is vague here: is this variable going to be a class, or
object, variable
def __init__(self, name, sex):
'''Initializes the person's data.'''
self.name = name
self.sex = sex
print '(Initializing %s )' % self.name
# When this person is created, he/she
# adds to the population
Person.population += 1
def __del__(self):
'''I am dying.'''
print '%s says bye.' % self.name
Person.population -= 1
if Person.population == 0:
print 'I am the last one.'
else:
print 'There are still %d people left.' %
Person.population
def sayHi(self):
'''Greeting by the person.
Really, that's all it does.'''
self.age = 25
print 'Hi, my name is %s, and I am %s, and I am age %d ' %
(self.name, self.sex, self.age)
def howMany(self):
'''Prints the current population.'''
if Person.population == 1:
print 'I am the only person here.'
else:
print 'We have %d persons here.' % Person.population
swaroop = Person('Swaroop', 'M')
swaroop.sayHi()
swaroop.howMany()
kalam = Person('Abdul Kalam', 'M')
kalam.sayHi()
kalam.howMany()
cathy = Person('Catherine', 'F')
cathy.sayHi()
cathy.howMany()
swaroop.sayHi()
swaroop.howMany()
############# 8< #########################
When I run this script, I got the following exception:
Exception exceptions.AttributeError: "'NoneType' object has no
attribute 'population'" in <bound method Person.__del__ of
<__main__.Person instance at 0xb7d8ac6c>> ignored
To to newcomer like me, this message doesn't make much sense. What
seems weird to me is that, if I change the variable cathy to something
else, like cath, or even cat, then the script will finish gracefully.
Why "cathy" is not liked?!!
Some of you may have recognized that the code is derived from a sample
code in Swaroop's "A byte of python".
My python is of version 2.5.1, on Ubuntu.
I am new to python, and I encountered a weird problem.
Here is my code
##########>8####################
#!/usr/bin/python
# Filename: objvar.py
class Person:
'''Represents a person.'''
population = 0
#sex = 'F'
#age = 22
# It is vague here: is this variable going to be a class, or
object, variable
def __init__(self, name, sex):
'''Initializes the person's data.'''
self.name = name
self.sex = sex
print '(Initializing %s )' % self.name
# When this person is created, he/she
# adds to the population
Person.population += 1
def __del__(self):
'''I am dying.'''
print '%s says bye.' % self.name
Person.population -= 1
if Person.population == 0:
print 'I am the last one.'
else:
print 'There are still %d people left.' %
Person.population
def sayHi(self):
'''Greeting by the person.
Really, that's all it does.'''
self.age = 25
print 'Hi, my name is %s, and I am %s, and I am age %d ' %
(self.name, self.sex, self.age)
def howMany(self):
'''Prints the current population.'''
if Person.population == 1:
print 'I am the only person here.'
else:
print 'We have %d persons here.' % Person.population
swaroop = Person('Swaroop', 'M')
swaroop.sayHi()
swaroop.howMany()
kalam = Person('Abdul Kalam', 'M')
kalam.sayHi()
kalam.howMany()
cathy = Person('Catherine', 'F')
cathy.sayHi()
cathy.howMany()
swaroop.sayHi()
swaroop.howMany()
############# 8< #########################
When I run this script, I got the following exception:
Exception exceptions.AttributeError: "'NoneType' object has no
attribute 'population'" in <bound method Person.__del__ of
<__main__.Person instance at 0xb7d8ac6c>> ignored
To to newcomer like me, this message doesn't make much sense. What
seems weird to me is that, if I change the variable cathy to something
else, like cath, or even cat, then the script will finish gracefully.
Why "cathy" is not liked?!!
Some of you may have recognized that the code is derived from a sample
code in Swaroop's "A byte of python".
My python is of version 2.5.1, on Ubuntu.