On Tue, 27 Feb 2007 06:40:29 +0000, Alan Isaac wrote: > "Ben Finney" <[EMAIL PROTECTED]> wrote in message > news:[EMAIL PROTECTED] >> The Pythonic design is: don't expect to have such control over users >> of your code. > > I know this is a popular response,
It's popular for good reason. > but the fact of the matter remains that > it can be helpful to know when someone > tries to set a value for a nonexisting attribute. I'm afraid your understanding of the word "fact" is different from my understanding of the word "fact". But be that as it may, if you wish to waste^H^H^H^H^H spend time trying to prevent people from adding attributes to their instances, Just Because, you can do something like this: class Difficult(object): def __setattr__(self, name, value): if self.__dict__.has_key(name): print "'%s' exists as an instance attribute" % name self.__dict__[name] = value elif self.__class__.__dict__.has_key(name): print "'%s' exists as a class attribute" % name self.__class__.__dict__[name] = value else: print "Can't create new attributes, 'cos I said so!" There ought to be a name for that anti-pattern of molly-coddling, bondage-and-domination philosophy of "you're only allowed to use my class the way I want you to use it". (Excuse my cynicism, for all I know you've got a really good reason for wanting to do this, perhaps as part of a cold-fusion machine.) -- Steven D'Aprano -- http://mail.python.org/mailman/listinfo/python-list