[英]Trying to understand Python classes and modules
我正在開發一個用 Python 編寫的簡單 IMAP 客戶端。 一旦我得到了一個初始腳本(因為我可以下載並向用戶顯示郵箱列表),我決定是時候讓代碼更有條理了。
我將 IMAP 相關函數分解為模塊名稱 imap.py,將用戶交互 + CUI 相關函數分解為模塊名稱 mail.py。 我將 imap.py 導入到 mail.py 中,但是當我嘗試調用 imap_functions class 時出現“未定義名稱”錯誤。 我很困惑,因為我在 imap.py 的開頭定義了 class imap_functions,正如我所說,它是導入到主腳本中的。
下面是兩個腳本的代碼:
# mail.py
import py_cui
import imap
#from itertools import chain
host = "imap.gmail.com"
username = "user@gmail.com"
password = "someappapassword"
imap_functions = imap_functions(host, username, password)
class Mail:
def __init__(self, master):
self.master = master
# Creating widgets for mailbox list on left and message list onright
# Make Mailbox widget and get a list of folders for account
Mailboxes = self.master.add_scroll_menu('Mailboxes', 0, 0, row_span=6, column_span=1)
Mailboxes.add_item_list(imap_functions.get_folders())
# Make a Messages widget and get a list of messages based on the folder selected.
Messages = self.master.add_scroll_menu('Messages', 0, 1, row_span=6, column_span=4)
# First select the folder
# message_list = client....whatever method lists messages
# Messages.add_item_list(message_list)
# Create the CUI with 7 rows 6 columns (may change later), pass it to the wrapper object, and start it
root = py_cui.PyCUI(7, 6)
root.set_title('Mail')
s = Mail(root)
imap_functions.login()
root.start()
和
### imap.py
import ssl
import imapclient
import email
class imap_functions:
def __init__(self, host, username, password):
self.host = host
self.username = username
self.password = password
self.client = IMAPClient(host)
def login(self, username, password):
"Handling various auth protocols"
#client.starttls() --- gmail does not support starttls
client.login(username, password)
return;
def get_folders(self):
"Grabbing the list of folders for the account"
get_folders = client.list_folders()
folder_list = []
for folders in get_folders:
folder_list.append(folders[2])
return folder_list;
#client.select_folder("INBOX")
您可以將導入更改為
from imap import imap_functions
# ...
imap_functions = imap_functions(host, username, password)
或者正如@mkrieger1 所指出的,您可以通過調用從模塊訪問 class
import imap
# ...
imap_functions = imap.imap_functions(host, username, password)
我還建議將 class 名稱更改為ImapFunctions
,因為 snake_case 通常用於變量和函數。 理想情況下,您可以將名稱更改為更好的名稱,例如ImapClient
,但我想這是一個選擇問題,除了您之外,誰會看到您的代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.