[Tutor] how do you use __dict__ ? (Was: code dangerous?)
antonmuhin на rambler.ru
antonmuhin на rambler.ru
Fri Jan 10 05:17:03 2003
Hello Alfred,
AM> ********************************************************
AM> class Person:
AM> def __init__(self, name):
AM> self.name = name
AM> def speak(self):
AM> __speak = self.__dict__.get('my_speak')
AM> if __speak:
AM> eval(__speak)
AM> else:
AM> print "%s says: my name is %s" % (self.name, self.name)
AM> def crankyspeak(self):
AM> print "%s says: I don't tell anyone my name" % (self.name)
AM> hobbit = Person('Bilbo Baggins')
AM> cranky = Person('someone else')
AM> cranky.__dict__['my_speak'] = 'self.crankyspeak()'
AM> hobbit.speak()
AM> cranky.speak()
AM> ********************************************************
I might be missing something, but why don't use simpler approach:
class Person:
def __init__(self, name):
self.name = name
self.speakMethod = None
def speak(self):
if self.speakMethod:
self.speakMethod(self)
else:
print "%s says: my name is %s" % (self.name, self.name)"
def setSpeakMethod(self, speakMethod):
self.speakMethod = speakMethod
def crankyspeak(person):
print "%s says: I don't tell anyone my name" % (person.name)
hobbit = Person('Bilbo Baggins')
cranky = Person('someone else')
cranky.setSpeakMethod(crankyspeak)
hobbit.speak()
cranky.speak()
Best regards,
Anton.