В вашей ситуации c на самом деле является функцией, которую нужно вызывать.
Вы можете использовать что-то вроде этого:
a = 10
b = 30
c = lambda: a + b
print c()
a += 20
print c()
Если вам не нравится, что вызов метода сделан явным для c, вы можете использовать общий объект Calc, который скрывает эту реализацию:
class Calc(object):
def __init__(self):
object.__setattr__(self, '_params', dict())
def __getattr__(self, name):
param = self._params[name]
if callable(param):
return param()
else:
return param
def __setattr__(self, name, value):
self._params[name] = value
def __delattr__(self, name):
del self._params[name]
И тогда вы можете сделать:
c = Calc()
c.a = 10
c.b = 30
c.c = lambda: c.a + c.b
print c.c
c.a += 20
print c.c