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. -- http://mail.python.org/mailman/listinfo/python-list