【发布时间】:2010-08-11 20:42:35
【问题描述】:
好的,我有一些代码可以归结为这样的模式
class Foo(object):
def get_something1(self):
# in the actual code it asks a web server but here I replaced that with "foo_something1" instead of the code from a web server
self.something1 = "foo_something1"
def get_something2(self):
# needs the result of get_something1; right now I have it get it by instance variable like so
self.something2 = self.something1 + "_something_2"
我的问题是,我应该执行上述操作(通过实例变量获取所需的方法)还是采用这样的参数;我还应该在 get_* 方法中返回 something1 和 something2 吗?
class Foo(object):
def get_something1(self):
# in the actual code it asks a web server but here I replaced that with "foo_something1" instead of the code from a web server
self.something1 = "foo_something1"
def get_something2(self, something_1):
# needs the result of get_something1; right now I have it get it by instance variable like so
self.something2 = something1 + "_something_2"
现在在我的代码中,方法返回延迟(扭曲);现在,当延迟触发时,它会设置实例变量并返回 None;在实际代码中,我有另一个函数来检查 something1 或 something2 是否已过期;我更新它们会带来一个问题,因为我更新它是这样的......
d = self.get_something1()
##d.addCallback(self.get_something2) # errors because it gets the argument None (so I do below)
d.addCallback(lambda ignored: self.get_something2())# problem the deferred for get_something2 is inaccessible
所以现在更新代码要么丑陋,要么充满错误,要么两者兼而有之。所以我有一种感觉,我正在做某事a)un pythonic或b)un twisted或c)其他一些糟糕的设计。
感谢您的回答,但这些不起作用,因为函数返回延迟而不是实际值(否则它将不得不阻塞)。
【问题讨论】:
-
由于我们不知道您设计的任何其他部分,我们无法回答这样的“应该”问题。如果需要,您应该这样做。