[Tutor] Immutable objects

Peter Otten __peter__ at web.de
Thu Aug 19 14:58:12 CEST 2010


Peter Otten wrote:

> Nitin Das wrote:
> 
>> class mymut(object):
>> 
>>   def __setattr__(self,k,v):
>>       if hasattr(self,k):
>>           if self.__dict__.get(k) == None:
>>               self.__dict__[k] = v
>>           else:
>>               raise TypeError("Cant Modify Attribute Value")
>>       else:
>>           raise TypeError("Immutable Object")
>> 
>> 
>> class mm(mymut):
>>     x = ''
>>     y = ''
>>     def __init__(self,x,y):
>>         self.x = x
>>         self.y = y
>> 
>> 
>> 
>> p = mm(10,11)
>> print p.x
>> print p.y
>> 
>> 
>> I have created this immutable object.Is there any other better
>> implementation?
> 
> How about
> 
>>>> from collections import namedtuple
>>>> Mm = namedtuple("Mm", "x y")
>>>> p = Mm(10, 11)
>>>> p.x
> 10
>>>> p.y
> 11
>>>> p.x = 42
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> AttributeError: can't set attribute
>>>> p.z = 42
> Traceback (most recent call last):
>   File "<stdin>", line 1, in <module>
> AttributeError: 'Mm' object has no attribute 'z'
>>>>

By the way, you can see the class definition with

namedtuple("Mm", "x y", verbose=True)

Peter



More information about the Tutor mailing list