Understanding the pythonic way: why a.x = 1 is better than a.setX(1) ?

Bruno Desthuilliers bdesth.quelquechose at free.quelquepart.fr
Thu Sep 4 13:49:21 EDT 2008


Ivan Illarionov a écrit :
> On 4 сент, 22:59, Carl Banks <pavlovevide... at gmail.com> 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.





More information about the Python-list mailing list