同一文件中函数的循环依赖性 python

Circular dependencies python for functions in same file

我的代码结构是这样的:-

def send_message(msg):
    print msg + "\n"
    x.new_message("You",msg)


class GUI(Frame):

def createWidgets(self):
    self.input.bind('<Key-Return>',self.send)

def send(self, event):
    send_message(self.contents.get())
    self.contents.set("")
def new_message(self,sender, msg):
    line = sender+": "+msg+"\n"
    self.chat.contents.set(self.chat.contents.get()+line)

def __init__(self):
    self.createWidgets()

x = GUI()

如您所见,这有一些循环依赖。函数 send_message 需要实例 x 以及 GUI 的 new_message 方法。 GUI 定义需要 send_message。因此不可能满足所有约束条件。怎么办?

Python 函数中的名称在定义函数时不需要引用任何内容 - 只有在实际调用函数时才会查找它们。因此,您的 send_message() 完全可以(尽管将 x 设为参数而不是全局变量可能会更好)。

您的 GUI class 将无法如图所示实例化,因为您没有显示小部件的创建 - 例如 self.input。我不知道有多少是因为你为了发布而剥离了代码。

在您在评论中显示的完整代码中,我们可以看到您在 GUI.__init__ 中调用了 self.mainloop()。这将启动 gui 的事件处理,并且可能在程序完成之前不会终止。只有这样作业 x = GUI() 才会完成并且 x 可用。

要避免这种情况,您有多种选择。通常在 __init__ 中进行无限循环可能不是一个好主意。而是在实例化 GUI 后调用 mainloop()

def __init__(self):
    # only do init

x = GUI()
x.mainloop()

正如 jasonharper 在 python 中所说,函数中的变量仅在您执行该函数时查找,而不是在定义它们时查找。因此,运行时的循环依赖在大多数情况下在 python.

中不是问题