Хорошо, у меня есть код, который сводится к шаблону, подобному этому
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"
Мой вопрос заключается в том, должен ли я делать вышеупомянутое (методы, получающие то, что им нужно, через переменные экземпляра) или с помощью таких аргументов; также я должен возвращать что-то1 и что-то2 в методах get_ *?
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"
Теперь в моем коде методы возвращают deferreds (twisted); Прямо сейчас, когда deferreds срабатывает, он устанавливает переменные экземпляра и возвращает None; В реальном коде у меня есть другая функция, которая проверяет, истек ли что-то1 или что-то2; Я обновляю их, что вызывает проблему, потому что я обновляю это так ...
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
Так что сейчас код обновления либо уродлив, либо заполнен ошибками, либо и то, и другое. Таким образом, у меня есть ощущение, что я делаю что-то либо: а) не питоническое, либо б) не перекрученное, либо в) какое-то другое плохое решение.
Спасибо за ответы, но они не будут работать, потому что функции возвращают отложенные значения, а не фактическое значение (в противном случае его придется заблокировать).