Python學習筆記 9.0 模組 與 包 與 物件導向版學員管理系統
Python學習筆記 9.0 模組 與 物件導向版學員管理系統
模組
Python 模組(Module),是一個Python檔案,以.py 結尾, 包含了Python 物件定義和Python語句。
模組能定義函式,類和變數, 模組裡也能包含可執行的程式碼。
一、匯入模組
1.匯入模組的方式
·0· import 模組名
·0· from 模組化名 import 功能名
·0· form 模組名 import *
·0· import 模組名 as 別名
·0· from 模組名 import 功能名 as 別名
2.匯入方式詳解
import
·0· 語法
# 1. 匯入模組
Import 模組名
Import 模組名1,模組名2……
# 2,呼叫功能
模組名.功能名()
# 需求: math 模組下sqrt()開平方計算
"""
1.匯入模組
2.測試是否匯入成功: 呼叫該模組的sqrt功能
"""
# 方法一:import 模組名;模組名.功能
import math
print(math.sqrt(9))
from……import……
·0· 語法
from 模組名 import 功能1, 功能2, 功能3……
# 方法二: from 模組名 import 功能1, 功能2……;功能呼叫(不需要書寫模組名,功能)
from math import sqrt
print(sqrt(9))
from……import *
·0· 語法
from 模組名 import *
# 方法三:from 模組名 import *; 功能呼叫
from math import *
print(sqrt(9))
as定義別名
·0· 語法
# 模組定義別名
import 模組名 as 別名
# 功能定義別名
from 模組名 import 功能 as 別名
二、製作模組
在python中,每個python檔案都可以作為一個模組,模組的名字就是檔案的名字。也就是說 自定義模組名必須要符合識別符號命名規則
1 定義模組
新建一個Python檔案,命名為my_module1.py,並定義testA函式
# 需求:一個函式完成任意兩個數字加法運算
def testA(a, b):
print(a + b)
2 測試模組
在實際開發中,當一個開發人員編寫完一個模組之後,為了讓模組能夠在專案中打到想要的效果,這個開發人員會自行在py檔案中新增一些測試資訊,例如,在my_module1.py檔案中新增測試程式碼。
# 需求:一個函式完成任意兩個數字加法運算
def testA(a, b):
print(a + b)
testA(1, 1)
此時,無論是當前檔案,還是其他已經匯入了該模組的檔案,在執行的時候都會自動執行testA函式的呼叫。
解決方法如下:
# __name__是系統變數,是模組的識別符號,值是:如果是自身模組值是__main__,否則是當前的模組的名字
if __name__ == '__main__':
# testA(1, 1)
3 呼叫模組
import my_module1
三、模組定位順序
當匯入一個模組,python直譯器對模組位置的搜尋順序是:
- 當前目錄
- 2.如果不在當前目錄,python則會搜尋在shell變數PYTHONPATH下的每個目錄。
- 如果都找不到,python會檢視預設路徑。UNIX下,預設路徑一般為/usr/local/lib/python/
模組搜尋路徑儲存在system模組的sys.path變數中。變數裡包含當前目錄,PYTHONPATH和由安裝過程決定的預設目錄。
·0· 注意
=自己的檔名不要和已有的模組名重複,否則導致模組功能無法使用
=使用from 模組名 import 功能 的時候,如果功能名字重複, 呼叫到的是最後定義或匯入的功能。(後面定義的重名都會進行覆蓋)
四、__all__
如果一個模組檔案中有__all__
變數,當使用from xx import *匯入時,只能匯入這個列表中的元素
·0· my_module2程式碼模組
# 定義多個功能,把某個功能新增到__all__
__all__ = ['testA']
def testA():
print('testA')
def testB():
print(testB)
·0·匯入模組的檔案程式碼
from my_module2 import *
testA()
testB()
包
包將有聯絡的模組組織到一起,即放到同一個資料夾下,並且在這個資料夾建立一個名字為__init__.py檔案,那麼這個資料夾就稱之為包。
一、製作包
[New]—[Python Package]—輸入包名—[OK]——新建功能模組(有聯絡的模組)。
注意:新建包後,包內部會自動建立__init__.py檔案,這個檔案控制著包的匯入行為。
二、匯入包
方法一、
Import 包名.模組名
包名.模組名.目標
# my_module1
print(1)
def info_print1():
print('mymodule1')
# my_module2
print(2)
def info_print2():
print('mymodule2')
# 方法一
"""
1. 匯入
import 包名.模組名
2. 呼叫功能
包名.模組名.功能()
"""
# 匯入mypackage包下的模組1,使用這個模組內的print1函式
import mypackage.my_module2
mypackage.my_module2.info_print2()
方法二、
注意:必須在__init__.py
檔案中新增__all__ = []
,控制允許匯入的模組列表。
from 包名 import *
模組名.目標
__all__ = ['my_module1']
# 方法二: 注意 設定__init__.py檔案裡面的all列表,新增的是允許匯入的模組
"""
from 包名 import *
模組名.目標
"""
from mypackage import *
my_module1.info_print1()
總結 模組與包
物件導向版 學員管理系統
一、 系統需求
使用物件導向程式設計思想完成學員管理系統的開發,具體如下:
·0· 系統要求:學員資料儲存在檔案中。
·0· 系統功能:新增學員、刪除學員、修改學員資訊、查詢學員資訊、顯示所有學員資訊、儲存學員資訊及退出系統等功能。
二、 準備程式檔案
1 分析
·0· 角色分析
= 學員
= 管理系統
工作中注意事項:
- 為了方便維護程式碼,一般一個角色一個程式檔案;
- 程式要有主程式入口,習慣為main.py
2 建立程式檔案
建立專案目錄、例如:StudentManagerSystem
程式檔案如下:
·0· 程式入口檔案:main.py
·0· 學員檔案: student.py
·0· 管理系統檔案:managerSystem.py
三、 書寫程式
1 student.py
需求:
·0· 學員資訊包含:姓名、性別、手機號;
·0· 新增__str__魔法方法,方便檢視學員物件資訊
class Student(object):
def __init__(self, name, gender ,tel):
# 姓名,性別,手機號
self.name = name
self.gender = gender
self.tel =tel
def __str__(self):
return f'{self.name}, {self.gender}, {self.tel}'
2 managerSystem.py
需求:
·0·儲存資料的文職: 檔案(student.data)
= 載入檔案資料
= 修改資料後儲存到檔案
·0· 儲存資料的形式: 列表儲存學院物件
·0· 系統功能
= 新增學員
= 刪除學員
= 修改學員
= 查詢學員資訊
= 顯示所有學員資訊
= 儲存學員資訊
# 定義類
class StudentManager(object):
def __init__(self):
# 儲存學員資料 -- 列表
self.student_list = []
# 學員有很多,想要一次性把學員作儲存就用列表就可以了
管理系統框架
需求: 系統功能迴圈使用,使用者輸入不同的功能序號執行不同的功能。
·0· 步驟
= 定義程式入口函式
@ 載入資料
@ 顯示功能選單
@ 使用者輸入功能序號
@ 根據使用者輸入的功能序號執行不同的功能
= 定義系統功能函式,新增,刪除學員等
3 main.py
# 1.匯入管理系統模組
from managerSystem import *
# 2.啟動管理系統
# 保證是當前檔案執行才啟動管理系統: if -- 建立物件並呼叫類方法(()run)
if __name__ == '__main__':
student_manger = StudentManager()
student_manger.run()
4 定義系統功能函式
a) 新增功能
·0· 需求:使用者輸入學員姓名、性別、手機號,將學院新增到系統。
·0· 步驟
= 使用者輸入姓名、性別、手機號
= 建立該學員物件
= 將該學員物件新增到列表
# 2,2 新增學員
def add_student(self):
# 1.使用者輸入姓名、性別、手機號
name = input('請輸入您的姓名:')
gender = input('請輸入您的性別:')
tel = input('請輸入您的手機號:')
# 2. 建立學員物件 -- 類:在student 檔案 先匯入student模組,再建立物件
student = Student(name, gender, tel)
# 3. 將該物件新增到學員列表
self.student_list.append(student)
print(self.student_list)
print(student)
b) 刪除學員
·0· 需求:使用者輸入目標學員名字,如果學員在則刪除該學員。
·0· 步驟
= 使用者輸入目標學員名字
= 遍歷學員資料列表,如果使用者輸入的學員姓名存在則刪除,否則則提示該學員不存在
# 刪除學員
def del_student(self):
# 1.使用者輸入目標學員姓名
del_name = input('請輸入要刪除的學員姓名:')
# 2.遍歷學員列表,如果使用者輸入的學員存在則刪除學員物件,否則提示學員不存在
for i in self.student_list:
if del_name == i.name:
# 刪除該學員物件
self.student_list.remove(i)
break
else:
# 迴圈正常結束執行的程式碼:迴圈結束都沒有刪除任何一個物件,說明使用者輸入的目標學員不存在
print('查無此人')
c) 修改學員資訊
·0· 需求: 使用者輸入目標學員姓名,如果學員存在則修改該學員資訊。
·0· 步驟
= 使用者輸入目標學員姓名:
= 遍歷學員資料列表,如果使用者輸入的學員姓名存在則修改學員的姓名、性別、手機號資料。否則則提示該學員不存在。
# 修改學員資訊
def modify_student(self):
# 1.使用者輸入目標學員姓名
modify_name = input('請輸入要修改的學員姓名')
# 2.遍歷列表資料,如果學員存在修改姓名性別手機號,否則提示學院不存在
for i in self.student_list:
if modify_name == i.name:
i.name = input('姓名:')
i.gender = input('性別:')
i.tel = input('手機號:')
print(f'修改學員資訊陳宮,姓名{i.name}, 性別{i.gender}, 手機號{i.tel}')
else:
print('查無此人')
d) 查詢學員資訊
·0· 需求: 使用者輸入目標學員姓名,如果學員存在則列印該學員資訊
·0· 步驟:
= 使用者輸入目標學員姓名
= 遍歷學員資料列表,如果使用者輸入的學員姓名存在則列印學員資訊,否則提示該學員不存在。
# 查詢學員資訊
def search_student(self):
# 1.使用者輸入目標學員姓名
search_name = input('請輸入您要搜尋的學員姓名:')
# 2.遍歷列表,如果學員存在列印學員資訊,否則提示學員不存在
for i in self.student_list:
if search_name == i.name:
print(f'{i.name}, {i.gender}, {i.tel}')
else:
print('查無此人')
e) 顯示所有學員資訊
·0· 列印所有學員資訊
·0· 步驟
= 遍歷學員資料列表,列印所有學員資訊
顯示所有學員資訊
def show_student(self):
# 1. 列印表頭
print('姓名\t性別\t手機號')
# 2. 列印學員資料
for i in self.student_list:
print(f'{i.name}\t{i.gender}\t{i.tel}')
f) 儲存學員資訊
·0· 需求: 將修改後的學員資料儲存到儲存資料的檔案
·0· 步驟
= 開啟檔案
= 檔案寫入資料
= 關閉檔案
思考:
- 檔案寫入的資料是學員物件的記憶體地址嗎?
將來寫入的時候列表裡面需要的是字典資料,所以利用__dict__轉換成為一個字典 - 檔案內資料要求的型別是什麼?
儲存學員資訊
def save_seudent(self):
# 1. 開啟檔案
f = open('student.data', 'w')
# 2.檔案寫入資料
# 2.1 [學員物件]轉換成[字典]
new_list = [i.__dict__ for i in self.student_list]
# 2.2 檔案寫入字串資料
f.write(str(new_list))
# 3.關閉檔案
f.close()
g) 擴充 __dict__
# 1. 定義類
class A(object):
a = 0
def __init__(self):
self.b = 1
# 2. 建立物件
aa = A()
# 3.呼叫__dict__
# 返回類內部所有屬性和方法對應的字典
print(A.__dict__)
# 返回例項屬性和值組成的字典
print(aa.__dict__)
h) 載入學員資訊
·0· 需求: 每次進入系統後,修改的資料是檔案裡面的資料
·0· 步驟
= 嘗試以”r”模式開啟學員資料檔案,如果檔案不存在則以”w”模式開啟檔案
= 如果檔案存在則讀取資料並儲存資料
@ 讀取資料
@ 轉換資料型別為列表並轉換列表內的字典為物件
@ 儲存學員資料到學員列表
= 關閉檔案
# 載入學員資訊
def load_student(self):
# 1. 開啟檔案: 嘗試r開啟,如果有異常w
try:
f = open('student.data', 'r')
except:
f = open('student.data', 'w')
else:
# 2. 讀取資料: 檔案讀取出的資料是字串還原列表型別:[{}] 轉換[學院物件]
data = f.read() # 字串
new_list = eval(data)
self.student_list = [Student(i['namne'], i['gender'], i['tel']) for i in new_list]
finally:
# 3. 關閉檔案
f.close()
5 程式碼總合
1 ·0· student
class Student(object):
def __init__(self, name, gender ,tel):
# 姓名,性別,手機號
self.name = name
self.gender = gender
self.tel =tel
def __str__(self):
return f'{self.name}, {self.gender}, {self.tel}'
2 ·0· managerSystem
from student import *
class StudentManager(object):
def __init__(self):
# 儲存學員資料 -- 列表
self.student_list = []
# 一、程式入口函式
def run(self):
# 1.載入檔案裡面的學員資料
self.load_student()
while True:
# 2.顯示功能選單
self.show_menu()
# 3.使用者輸入目標功能序號
menu_num = int(input('請輸入您需要的功能序號'))
# 4.根據使用者輸入的序號執行不同的功能 -- 如果使用者輸入1,執行新增
if menu_num == 1:
# 新增學員
self.add_student()
elif menu_num == 2:
# 刪除學員
self.del_student()
elif menu_num == 3:
# 修改學員資訊
self.modify_student()
elif menu_num == 4:
# 查詢學員資訊
self.search_student()
elif menu_num == 5:
# 顯示所有學員資訊
self.show_student()
elif menu_num == 6:
# 儲存學員資訊
self.save_seudent()
elif menu_num == 7:
# 退出系統 -- 退出迴圈
break
# 二、系統功能函式
# 2.1 顯示功能選單 -- 列印序號的動能對應關係 -- 靜態
@staticmethod
def show_menu():
print('請選擇如下功能')
print('1:新增學員')
print('2:刪除學員')
print('3:修改學員資訊')
print('4:查詢學員資訊')
print('5:顯示所有學員資訊')
print('6:儲存學員資訊')
print('7:退出系統')
# 2,2 新增學員
def add_student(self):
# 1.使用者輸入姓名、性別、手機號
name = input('請輸入您的姓名:')
gender = input('請輸入您的性別:')
tel = input('請輸入您的手機號:')
# 2. 建立學員物件 -- 類:在student 檔案 先匯入student模組,再建立物件
student = Student(name, gender, tel)
# 3. 將該物件新增到學員列表
self.student_list.append(student)
print(self.student_list)
print(student)
# 2.3 刪除學員
def del_student(self):
# 1.使用者輸入目標學員姓名
del_name = input('請輸入要刪除的學員姓名:')
# 2.遍歷學員列表,如果使用者輸入的學員存在則刪除學員物件,否則提示學員不存在
for i in self.student_list:
if del_name == i.name:
# 刪除該學員物件
self.student_list.remove(i)
break
else:
# 迴圈正常結束執行的程式碼:迴圈結束都沒有刪除任何一個物件,說明使用者輸入的目標學員不存在
print('查無此人')
# 3.
# 2.4 修改學員資訊
def modify_student(self):
# 1.使用者輸入目標學員姓名
modify_name = input('請輸入要修改的學員姓名')
# 2.遍歷列表資料,如果學員存在修改姓名性別手機號,否則提示學院不存在
for i in self.student_list:
if modify_name == i.name:
i.name = input('姓名:')
i.gender = input('性別:')
i.tel = input('手機號:')
print(f'修改學員資訊陳宮,姓名{i.name}, 性別{i.gender}, 手機號{i.tel}')
else:
print('查無此人')
# 2.5 查詢學員資訊
def search_student(self):
# 1.使用者輸入目標學員姓名
search_name = input('請輸入您要搜尋的學員姓名:')
# 2.遍歷列表,如果學員存在列印學員資訊,否則提示學員不存在
for i in self.student_list:
if search_name == i.name:
print(f'{i.name}, {i.gender}, {i.tel}')
else:
print('查無此人')
# 2.6 顯示所有學員資訊
def show_student(self):
# 1. 列印表頭
print('姓名\t性別\t手機號')
# 2. 列印學員資料
for i in self.student_list:
print(f'{i.name}\t{i.gender}\t{i.tel}')
# 2.7 儲存學員資訊
def save_seudent(self):
# 1. 開啟檔案
f = open('student.data', 'w')
# 2.檔案寫入資料
# 2.1 [學員物件]轉換成[字典]
new_list = [i.__dict__ for i in self.student_list]
# 2.2 檔案寫入字串資料
f.write(str(new_list))
# 3.關閉檔案
f.close()
# 2.8 載入學員資訊
def load_student(self):
# 1. 開啟檔案: 嘗試r開啟,如果有異常w
try:
f = open('student.data', 'r')
except:
f = open('student.data', 'w')
else:
# 2. 讀取資料: 檔案讀取出的資料是字串還原列表型別:[{}] 轉換[學院物件]
data = f.read() # 字串
new_list = eval(data)
self.student_list = [Student(i['namne'], i['gender'], i['tel']) for i in new_list]
finally:
# 3. 關閉檔案
f.close()
3 ·0·main
# 1.匯入管理系統模組
from managerSystem import *
# 2.啟動管理系統
# 保證是當前檔案執行才啟動管理系統: if -- 建立物件並呼叫類方法(()run)
if __name__ == '__main__':
student_manger = StudentManager()
student_manger.run()
相關文章
- 【python 物件導向】 python物件學習筆記《1》Python物件筆記
- Python學習筆記|Python之物件導向Python筆記物件
- Python 3 學習筆記之——物件導向Python筆記物件
- Python學習之模組與包Python
- Nginx 學習筆記--程式與模組Nginx筆記
- Python 學習筆記之類「物件導向,超類,抽象」Python筆記物件抽象
- Flutter學習筆記(8)--Dart物件導向Flutter筆記Dart物件
- js高階 物件導向 學習筆記JS物件筆記
- Nginx 學習筆記--程式與模組(二)Nginx筆記
- Python學習筆記 5.0 元組 與 字典 與 集合 與 公共操作 與 推導式Python筆記
- Python3:物件導向程式設計學習筆記(2)Python物件程式設計筆記
- Python 物件導向筆記Python物件筆記
- 3. Struct 與 物件導向 |《 刻意學習 Golang 》Struct物件Golang
- JDK 新特性學習筆記之模組系統JDK筆記
- Python 3 學習筆記之——變數作用域、模組和包Python筆記變數
- python物件導向思想(類與物件)Python物件
- Python包與模組Python
- Python - 模組與包Python
- python模組與包Python
- 學習Rust 物件導向Rust物件
- 程式設計基礎·Java學習筆記·物件導向(下)程式設計Java筆記物件
- Python學習筆記_函式_匯入模組Python筆記函式
- Python學習之物件導向程式設計Python物件程式設計
- Python學習筆記 - 閉包Python筆記
- C++學習筆記(三):類與物件--靜態成員變數與常成員函式C++筆記物件變數函式
- 草根學Python(九) 物件導向Python物件
- C#學習筆記(六)——物件導向程式設計簡介C#筆記物件程式設計
- 物件導向筆記物件筆記
- PHP學習4——物件導向PHP物件
- Lua學習(二)物件導向物件
- Python3學習筆記4 , 迴圈、模組Python筆記
- 以太坊學習筆記————8、錢包匯入與賬戶管理筆記
- Python學習之路——類-物件導向程式設計Python物件程式設計
- 物件導向與程式導向物件
- 程式導向與物件導向物件
- python之成員(物件導向)Python物件
- MySQL與Python的互動學習筆記MySqlPython筆記
- PHP 手冊 (類與物件) 學習筆記七:物件繼承PHP物件筆記繼承