第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將大文件拆分為模塊時出現(xiàn)循環(huán)導入問題

將大文件拆分為模塊時出現(xiàn)循環(huán)導入問題

拉莫斯之舞 2023-09-19 14:16:29
我是約翰,我是一名新程序員!這是我在此的頭一篇博文!我最近使用 Tkinter 創(chuàng)建了一個 Python 程序。該程序允許用戶將一些數(shù)據(jù)插入數(shù)據(jù)庫并創(chuàng)建 .docx 文件。它還允許執(zhí)行簡單的數(shù)據(jù)庫搜索。在編碼過程中,我從未想到源代碼會這么長,但我已經(jīng)使用基于(相對)相似性分組為類的方法編寫了它。因此,過了一段時間,我決定將代碼拆分為多個模塊,每個模塊由一個類組成,這會是更明智的做法。它更多地是為了可讀性而不是可重用性,因為在我看來,大多數(shù)類和方法都是針對該程序的。問題似乎是其中兩個類確實相互依賴,并且我不斷收到:AttributeError: partially initialized module 'main_app' has no attribute 'Main' (most likely due to a circular import)我將演示這兩個類的部分內(nèi)容,以展示兩者如何相互依賴。main_app.py:import databaseclass Main():    ..    def create_widgets(self):     ..        self.f5 = tk.Frame(self.search_tab, bg="lightyellow", padx=5, pady=5)        self.f5.pack(expand=True, fill='both')        self.delete_button = ttk.Button(self.f5, text='Διαγραφ?', command=data.delete_from_database, state='disabled')        self.delete_button.pack(side='right', fill='both')        self.edit_button = ttk.Button(self.f5, text='Επεξεργασ?α', command=data.update_entry_retrieve, state='disabled')        self.edit_button.pack(side='right', fill='both')        ..if __name__ == "__main__":    root = tk.Tk()    data = database.Database()    main = Main(root)    root.mainloop()此代碼塊顯示了 Main 類如何使用 Database 類(實例化為數(shù)據(jù))的方法。database.py:..import main_appclass Database():    ..    def save_to_database(self):        sql = f'INSERT INTO entries VALUES (?,?,?,?,?,?,?,?,?,?,?,?);'        try:            con = lite.connect(self.db)            with con:                cur = con.cursor()                cur.execute(sql, (main.id_number, main.surname, main.name, main.reason, main.office_article, main.office_type, main.office_name, main.protocol_num,\                     main.protocol_date, main.other_doc_passport, main.other_doc_driver, main.timestamp))                cur.execute('COMMIT;')            return True        except Exception as e:            print(e)            return False        ..main = main_app.Main()這段代碼數(shù)據(jù)庫如何訪問主類的變量。完整的代碼可以在項目“split”存儲庫中找到。是否有一個我看不到的簡單解決方案,或者應(yīng)該完全重寫代碼以減少我的類的依賴性?不管怎樣,我花了昨天整個下午的時間來尋找解決方案,但在繞圈子時,就像我的導入一樣。我嘗試改變模塊的導入方式,但完全沒有改變??峙麓a太混亂,無法拆分。
查看完整描述

1 回答

?
牛魔王的故事

TA貢獻1830條經(jīng)驗 獲得超3個贊

在database.py中,不要導入main_app,而是:


class Database:

    def __init__(self, main):

        self.main = main

create_widgets在 main_app.py 中,從構(gòu)造函數(shù)中刪除。然后:


main = Main(root)

data = database.Database(main)

main.create_widgets()


查看完整回答
反對 回復 2023-09-19
  • 1 回答
  • 0 關(guān)注
  • 106 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號