Interestingly, if you change

  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()

to

  def main():
    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()
    return 0


  if __name__ == "__main__":
    sys.exit(main())


The problem goes away.  (This is a good coding practice in any event.)

As others have pointed out, the order in which local variables are deleted
is undefined.  It looks to me as if the class Person got deleted before
Catherine did. 

Adding

  del kalam
  del cathy
  del swaroop

to the end of the program did fix the problem, presumably by forcing
kalam, cathy, and swaroop from being deleted before Person.

However, Adding

        self.myclass = Person

to the __init__() method didn't stop the problem.  I thought it might, because
then each of the objects would have held a reference to Person.  Actually, I 
would
have thought they'd hold a reference by merely existing, so is this not a bug?

-- 
        -Ed Falk, [EMAIL PROTECTED]
        http://thespamdiaries.blogspot.com/
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to