Ivan Illarionov a écrit :
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.
Once again : for which definition of "better" ?-)
It is not me who
suggested dynamism restriction as a way to guard against errors.
My post was not targeted to you personnaly - I just wanted to make it
clear for other readers that this (ab)use of slots was considered bad form.
--
http://mail.python.org/mailman/listinfo/python-list