在你的情況,c實際上是一個必須被調用的函數。 你可以使用這樣的事情:
a = 10
b = 30
c = lambda: a + b
print c()
a += 20
print c()
如果你不喜歡,該方法調用時明確爲C,你可以使用普通計算器對象,它隱藏了實現:
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
+1。我喜歡你的第一種方法。 c是不是一個變量,爲什麼所有的化妝? – muhuk 2010-03-28 16:26:50
但是,爲什麼不在第二個例子中簡單地執行'self._params = {}'。這不是一箇舊式的類,但它具有'__init__'的氣味。 – muhuk 2010-03-28 16:28:02
@muhuk:如果我在'__init__'中完成'self._params = {}',那麼這將導致'Calc .__ setattr__'處理該命令。 '__setattr__'會調用'__setattr__',進入無限遞歸。 使用'object .__ setattr__'允許最初創建'_params',之後它可以正常使用,而不需要'__setattr__','__getattr__'或'__delattr__'處理'_params'。 – Johan 2010-03-28 16:51:51