繁体   English   中英

生成器在 object 实例化时产生

[英]generator yielding upon object instantiation

我正在开发一个大型 python 项目,其中在运行时需要用户输入。 输入要求被封装在一个包含一些元信息的 class Decision中。 目前,这些决定是在他们自己的__init__中处理的(见下文)。 这些决定广泛分布在代码中。

我想要实现的是将work() function 转换为生成决策的生成器,并且可以在顶层进行处理(请参阅评论)。

在下面的示例中,我可以轻松地从somewhere_deep_in_code的deep_in_code 中做出决定以使其work ,但这在实际代码中是不可能的。 我虽然可以在另一个线程中处理work中的所有内容并等待发生的决定。 但是这里没有任何实际的异步,这样做似乎是错误的。 也许事件或协程可以解决问题,但我不知道如何。 由于 tue 事实上这是一个非常特殊的问题,我在评论来源中没有发现任何有用的信息。 因此,我会感谢任何帮助或想法。

def handle_decision(decision):
    decision.value = 42

class Decision:
    def __init__(self, questions):
        self.questions = questions
        self.value = None
        handle_decision(self)  # this should go to top level

def somewhere_deep_in_code():
    decision = Decision("item1")
    # do sth with decision.value
    print(decision.value)
    somewhere_even_deeper_in_code()

def somewhere_even_deeper_in_code():
    decision = Decision("item2")
    # do sth with decision.value
    print(decision.value)

def work():
    somewhere_deep_in_code()

def main():
    # current implementation
    work()
    
    # how it should be
    for decision in work():
        handle_decision(decision)

if __name__ == '__main__':
    main()

一旦您要求做出决定,您是要等待一项还是继续执行其他任务? 本文列出了 Python 中可用的事件系统的最新列表: Python 中的事件系统 像 Kivy 这样的 GUI 框架正在处理像事件这样的用户交互。 也许你可以看看一个灵感?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM