[Python] Uso di __getattr__ e old style class e new style class

Giovanni Porcari giovanni.porcari a softwell.it
Mer 9 Ott 2013 17:23:15 CEST



> Il giorno 09/ott/2013, alle ore 17:07, Manlio Perillo <manlio.perillo a gmail.com> ha scritto:
> 
>> On 09/10/2013 16:26, Giovanni Porcari wrote:
>> Buongiorno a tutti
>> 
>> [...]
>> class TestClassNewStyle(object):
>>     def __init__(self):
>>         self.store = dict()
>> 
>>     def __getattr__(self,name):
>>         print '__getattr__ :' ,name
>>         if not hasattr(dict,name):
>>             raise AttributeError("dict has no attribute '%s'" % name)
>>         return getattr(self.store,name)
>> 
>> def test(factory):
>>     x = factory()
>>     x['foo'] = 21
>>     print x['foo']
>>     print len(x)
> 
> 
>> [...]
>>     test(TestClassNewStyle)
>> 
>> [...]
>> 
>> --------- TestClassNewStyle ------
>> Traceback (most recent call last):
>>   File "/Users/fporcari/Downloads/pyro_test/testobject.py", line 38, in <module>
>>     test(TestClassNewStyle)
>>   File "/Users/fporcari/Downloads/pyro_test/testobject.py", line 27, in test
>>     x['foo'] = 21
>> TypeError: 'TestClassNewStyle' object does not support item assignment
>> ------------------------------------------------------------------------
>> 
>> In pratica vorrei che per ogni attributo che è definito in dict mi venisse restituita
>> la chiamata su self.store mentre ogni attributo non definito in dict dovrebbe generare un
>> attribute error.
> 
> http://docs.python.org/2.7/reference/datamodel.html#special-method-lookup-for-new-style-classes
> 
> 
> Ciao  Manlio
> _______________________________

Grazie Manlio. Sei sempre una certezza :)

G



Maggiori informazioni sulla lista Python