Andrea Crotti wrote:
On 09/23/2011 10:31 AM, Peter Otten wrote:

Inside __getattribute__() you ask for self.first_var which triggers another
__getattribute__() call that once again trys to determine the first_var
attribute before it returns...

Try using __getattr__() instead which is only triggered for non-existent
attributes

def __getattr__(self, name):
     return getattr(self.first_var, name)

or check for the attributes you don't want to delegate explicitly:

def __getattribute__(self, name):
     if name == "first_var":
         return super(PSIVar, self).__getattribute__(name)


Right thanks a lot it works perfectly.
I don't like too much, however, to mess around in this way, maybe it's better if I just fork the project
and patch the original code.

In this way maybe I can also contribute to it with patches (if they are accepted)...
Did you consider subclassing your Var class ? This is how you extend a class behavior in OOP.

class PSIVar(var):
   def __init__(self, name, desc, other=None, fun=None):
       var.__init__(self, name, desc)
       if other is not None:
           self.other = other
           self.fun = fun
           assert callable(self.fun)

v1 = PSIVar('name', 'desc')

that's it.

By the way, don't create instance attribute conditionally. Your PSIVar instance should always have a 'other' attribute, its value can be None though.



JM
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to