On 10/19/2010 9:39 AM, Lucasm wrote:
Hi,

A question. Is it possible to dynamically override a property?

class A(object):
     @property
     def return_five(self):
         return 5

I would like to override the property for an instance of A to say the
string 'bla'.

Is this the sort of thing you're looking for ...

#-------------------------------------
import inspect

class A(object):
    @property
    def return_five(self):
        try:
            # get name of this function ...
            frm = inspect.getframeinfo(inspect.currentframe())
            # ... and use it as dict key
            return self.__dict__[frm.function]

        except KeyError:
            # attr not set in instance
            return 5

a = A()
print "one:", a.return_five

b = A()
b.__dict__['return_five'] = 'bla'
print "two:", b.return_five

c = A()
print "three:", c.return_five
#-------------------------------------

The output is:

  one: 5
  two: bla
  three: 5

If you don't want to fool around with the inspect module, you can hard-code the function name as the instance's dict key:

   return self.__dict__['return_five']

HTH,
John
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to