python文件之间的相互依赖关系

时间:2018-10-02 08:16:25

标签: python

我正在编写一个程序,我想使程序的CORE与GUI(由Tkinter构建)分开。但是,有两个单独的python文件,我遇到以下问题:

GUI.py

import scrapy

class Brandon251Spider(scrapy.Spider):
name = "Brandon251"

def start_requests(self):
    urls = [
        "https://www.251brandon.com/floorplans"
    ]
    for url in urls:
        yield scrapy.Request(url=url, callback=self.parse)

def parse(self, response):
    price = response.css('.fp-price').extract()

    yield {
        'test': price
    }

CORE.py

def bar():
    if a == 'something':
        foo()   

Button(text="START!", command=bar).grid(row=1, column=1)

当我从CORE.py启动程序时,我得到:

from GUI import *

 def foo():
    <do something>

我不知道确切要去哪里寻找什么。

3 个答案:

答案 0 :(得分:3)

您在foo()中有GUI.py,但是当从from GUI import *调用CORE.py行时尚未定义,因此错误。

在这种简单情况下,您可以将foo的定义移至GUI.py

通常,GUI取决于“核心”模块,而不是相反。

答案 1 :(得分:2)

我认为您应该以其他方式引用您的模块:

# core.py
def foo():
    # Do something

然后从GUI模块中引用并调用您的核心模块

# gui.py
from core import foo

def bar():
    foo()

答案 2 :(得分:2)

该域具有不同的层(您称为“核心”),并且UI是非常理智的设计,但前提是该域对UI一无所知-而是UI必须依赖于域,而不是其他域一路走来。 IOW,您不想在“ core”中导入“ gui”,而是在“ gui”中导入“ core”。

如果内核需要将某些事件/条件通知给gui,则可以使用the observer pattern的某些变体。

请注意:如果您珍视自己的理智,切勿使用星号导入(“从某物导入*”)-除非在python shell或一次性抛出脚本中使用,否则不要使用。