Ivan Illarionov schrieb: > On 4 сент, 21:49, Bruno Desthuilliers > <[EMAIL PROTECTED]> wrote: >> Ivan Illarionov a écrit : >> >> >> >>> On 4 сент, 22:59, Carl Banks <[EMAIL PROTECTED]> wrote: >>>> You can write code to guard against this if you want: >>>> class A: >>>> legal = set(["x"]) >>>> def __setattr__(self,attr,val): >>>> if attr not in self.legal: >>>> raise AttributeError("A object has no attribute '%s'" % >>>> attr) >>>> self.__dict__[attr] = val >>>> def __init__(self,x): >>>> self.y = x >>>> I suspect most people who go into Python doing something like this >>>> soon abandon it when they see how rarely it actually catches anything. >>> '__slots__' is better: >> For which definition of "better" ? __slots__ are a mean to optimize >> memory usage, not to restrict dynamism. Being able to dynamically add >> arbitrary attributes is actually a feature, not a bug, and uselessly >> restricting users from doing so is not pythonic. IOW : don't do that. > > Carl's example is restricting dynamism in the same way as __slots__. > I've just suggested a better implementation. It is not me who > suggested dynamism restriction as a way to guard against errors.
This is not correct. While Carl's Example looks similar, you actually *can* create new attributes using obj.__dict__['name'] = value __slots__ OTOH prevents that because it does create instances *without* an instance-dict. This being said, I think we all agree that it's nothing to be desired. Diez -- http://mail.python.org/mailman/listinfo/python-list