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

Manlio Perillo manlio.perillo a gmail.com
Mer 9 Ott 2013 17:07:28 CEST


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


Maggiori informazioni sulla lista Python