Chcę zaimplementować method chaining, ale nie dla zwykłych funkcji - dla asyncio coroutines.Metoda łańcuchowa z asyncio coroutines
import asyncio
class Browser:
@asyncio.coroutine
def go(self):
# some actions
return self
@asyncio.coroutine
def click(self):
# some actions
return self
"intuicyjny" sposób wywołać łańcuch nie będzie działać, ponieważ pojedyncza metoda zwraca współprogram (generator), bez własnego:
@asyncio.coroutine
def main():
br = yield from Browser().go().click() # this will fail
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
poprawny sposób wywołać łańcuch jest:
br = yield from (yield from Browser().go()).click()
Ale wygląda to paskudnie i staje się nieczytelne, gdy łańcuch rośnie.
Czy jest jakiś sposób, aby to zrobić lepiej? Wszelkie pomysły są mile widziane.
Nie jestem pewien, czy rozumiem co próbujesz do zrobienia, ale jeśli chcesz tylko iterować metody na obiekcie, możesz to zrobić, ustawiając je w dyktafonie lub używając 'getattr'. – user3467349
Przepraszamy, powinieneś użyć "brzydkiego" sposobu. –