Python3中類、模塊、錯(cuò)誤與異常、文件的簡(jiǎn)易教程
和舊版的Python 2.7教程相比,新增內(nèi)容包括:
- 新增命名關(guān)鍵字參數(shù)的使用;
- 新增StringIO和BytesIO;
- 新增datetime的使用;
- 新增urllib的使用;
- 新增枚舉類型的使用;
- 新增virtualenv的使用;
- 新增asyncio編程;
- 新增aiohttp編程;
- 實(shí)戰(zhàn)的Web App已完全基于asyncio重寫。
本文將詳細(xì)給大家介紹Python3中類、模塊、錯(cuò)誤與異常、文件的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。
類
面向?qū)ο笤O(shè)計(jì)思想是 Class 抽象的,Instance 一個(gè)個(gè)具體的 Class,比如學(xué)生是抽象的 Class,而張三李四就是一個(gè)個(gè)具體學(xué)生。
定義
Class 大駝峰命名法。僅供內(nèi)部用的 Class,名稱前會(huì)加一個(gè)底線。
類定義一般格式:
class Student: pass # 或者 class Developer(object): pass
object 表示該類是從哪個(gè)類繼承下來的,object 是最終的父類。
class Developer(object): # 定義類屬性 name = 'WuXiaolong' site = 'http://wuxiaolong.me/' # 變量名兩個(gè)下劃線開頭,定義私有屬性, 這樣在類外部無法直接進(jìn)行訪問,類的私有方法也是如此 __sex = 0 # 定義構(gòu)造方法 def __init__(self, name, site, sex): self.name = name self.site = site self.__sex = sex # 類方法 def get_sex(self): return self.__sex def set_sex(self, sex): self.__sex = sex # 調(diào)用: if __name__ == '__main__': # 實(shí)例化類 developer = Developer('wxl', 'http://wuxiaolong.me/', 1) # 實(shí)例化成變量 print(developer.site, developer.get_sex()) # 訪問類的屬性和方法
注意:以單下劃線開頭的表示的是 protected 類型的變量或方法,即保護(hù)類型,只能允許其本身與子類進(jìn)行訪問,不能用于 from module import *。
單繼承
class Developer(object): # 定義類屬性 name = 'WuXiaolong' site = 'http://wuxiaolong.me/' # 變量名兩個(gè)下劃線開頭,定義私有屬性, 這樣在類外部無法直接進(jìn)行訪問,類的私有方法也是如此 __sex = 0 # 定義構(gòu)造方法 def __init__(self, name, site, sex): self.name = name self.site = site self.__sex = sex # 類方法 def get_sex(self): return self.__sex def set_sex(self, sex): self.__sex = sex # 單繼承 class AndroidCoder(Developer): coder_id = 1024 # 定義構(gòu)造方法 def __init__(self, name, site, sex, coder_id): # 調(diào)用父類構(gòu)造方法 # Developer.__init__(self, name, site, sex) # 老辦法 super(AndroidCoder, self).__init__(name, site, sex) # 采用新式 self.coder_id = coder_id # 重寫父類的方法 def set_sex(self, sex): self.__sex = sex print('這是個(gè)秘密') def get_sex(self): return self.__sex # 調(diào)用: if __name__ == '__main__': # 單繼承 androidCoder = AndroidCoder('wxl', 'http://wuxiaolong.me/', 1, 520) print(androidCoder.set_sex(2))
注意:super 繼承,要求最頂層的父類一定要繼承于object,這樣就可以利用 super() 函數(shù)來調(diào)用父類的 init() 等函數(shù)。
多繼承
B 繼承 A,C 繼承 B
以上面的單繼承為例,AndroidCoder 繼承了 Developer,現(xiàn)在讓 PythonCoder 繼承 AndroidCoder:
# 多繼承,B 繼承 A,C 繼承 B class PythonCoder(AndroidCoder): # 定義構(gòu)造方法 def __init__(self, name, site, sex, coder_id): # 調(diào)用父類構(gòu)造方法 super(PythonCoder, self).__init__(name, site, sex, coder_id) # 調(diào)用: if __name__ == '__main__': pythonCoder = PythonCoder('wxl', 'http://wuxiaolong.me/', 1, 1024) print(androidCoder.get_sex())
注意:多繼承圓括號(hào)中父類的順序,若是父類中有相同的方法名,而在子類使用時(shí)未指定,Python 會(huì)調(diào)用子類的;
Z 繼承 X、Y
class JavaCoder(object): java_id = 1 # 定義構(gòu)造方法 def __init__(self, java_id): self.java_id = java_id print('來自JavaCoder') class FullStackCoder(AndroidCoder, JavaCoder): # 定義構(gòu)造方法 def __init__(self, name, site, sex, coder_id): # 調(diào)用父類構(gòu)造方法 super(FullStackCoder, self).__init__(name, site, sex, coder_id) JavaCoder.__init__(self, coder_id) # 這里需要使用老辦法 # 調(diào)用: if __name__ == '__main__': fullStackCoder = FullStackCoder('wxl', 'http://wuxiaolong.me/', 1, 1024)
模塊
Python 模塊跟 Java 里包概念差不多,使用 import 語句導(dǎo)入。
import 語句
比如在類環(huán)節(jié)新建的文件名為 wxl_class.py,想在另個(gè)文件使用:
## 導(dǎo)入模塊 import wxl_class developer = wxl_class.Developer('wxl', 'http://wuxiaolong.me/', 1) # 實(shí)例變量 print(developer.site)
問題:發(fā)現(xiàn)打印了兩次,原來 wxl_class.py 沒有寫 __name__ 屬性。
__name__ 屬性
每個(gè)模塊都有一個(gè) __name__ 屬性,當(dāng)其值是'__main__'時(shí),表明該模塊自身在運(yùn)行,因此在 wxl_class.py 加上 __main__就好了。
if __name__ == '__main__': pass
from…import 語句
從模塊導(dǎo)入指定內(nèi)容或者 * 代表全部:
from wxl_def import hello1 m = hello1(666, 999)
作用域
正常的函數(shù)和變量名是公開的(public),可以被直接引用;
以兩個(gè)下劃線開頭,定義私有(private), 這樣在類外部無法直接進(jìn)行訪問;
以單下劃線開頭的表示的是 protected 類型的變量,即保護(hù)類型只能允許其本身與子類進(jìn)行訪問,不能用于 from module import *。
標(biāo)準(zhǔn)庫(kù)
Python 本身帶著一些標(biāo)準(zhǔn)的模塊庫(kù),比如 json 模塊。
Python3 中可以使用 json 模塊來對(duì) JSON 數(shù)據(jù)進(jìn)行編解碼,它包含了兩個(gè)函數(shù):
json.dumps(): 對(duì)數(shù)據(jù)進(jìn)行編碼;
json.loads(): 對(duì)數(shù)據(jù)進(jìn)行解碼。
JSON 類型與 Python 類型對(duì)應(yīng)關(guān)系:
import json # Python 字典類型轉(zhuǎn)換為 JSON 對(duì)象 python_data = {'id': 1024, 'name': 'wxl', 'site': 'http://wuxiaolong.me/'} print(json.dumps(python_data)) # 打印:{"id": 1024, "name": "wxl", "site": "http://wuxiaolong.me/"} # 將 JSON 對(duì)象轉(zhuǎn)換為 Python 字典 json_data = '{"id": 1024, "name": "wxl", "site": "http://wuxiaolong.me/"}' print(json.loads(json_data)) # 打?。簕'id': 1024, 'name': 'wxl', 'site': 'http://wuxiaolong.me/'}
第三方模塊
在 Python 中,安裝第三方模塊,是通過包管理工具 pip 完成的。
1、安裝 pip
sudo easy_install pip
2、比如安裝 PyMySQL 模塊來連接數(shù)據(jù)庫(kù),Python 3.x:
pip3 install PyMySQL
返回:
Collecting PyMySQL Using cached PyMySQL-0.7.11-py2.py3-none-any.whl Installing collected packages: PyMySQL Successfully installed PyMySQL-0.7.11
升級(jí) pip 到最新版本
python -m pip install --upgrade pip
錯(cuò)誤和異常
Java 中捕獲異常是用的 try catch finally,Python 是用的 try…except…finally…:
try: name = 'wxl' print(int(name)) except ValueError as e: # 所有的錯(cuò)誤類型都繼承自BaseException print(e) finally: print('finally')
文件
Python 內(nèi)置了讀寫文件的函數(shù),一般分為 3 步:
1、open() 函數(shù),打開一個(gè)文件對(duì)象;
2、調(diào)用 read() 方法讀取文件內(nèi)容;
3、調(diào)用 close() 方法關(guān)閉文件。
寫文件
桌面新建一個(gè)空白 Python3Learn.txt 文件:
def write_file(): try: f = open('/Users/wuxiaolong/Desktop/Python3Learn.txt', 'w') # 標(biāo)示符'w'表示寫 f.write('Hello, Python') except BaseException as e: print(e) finally: if f: f.close()
讀文件
def read_file(): try: f = open('/Users/wuxiaolong/Desktop/Python3Learn.txt', 'r') # 標(biāo)示符'r'表示讀 # print(f.read()) # read()會(huì)一次性讀取文件的全部?jī)?nèi)容 print(f.readlines()) # 每次讀取一行內(nèi)容,返回list except BaseException as e: print(e) finally: if f: f.close()
讀取二進(jìn)制文件
比如圖片、視頻等等,桌面隨便搞張 Python3Learn.png:
def read_byte_file(): try: f = open('/Users/wuxiaolong/Desktop/Python3Learn.png', 'rb') # 標(biāo)示符'rb'表示讀 print(f.read()) # read()會(huì)一次性讀取文件的全部?jī)?nèi)容 # print(f.readlines()) # 每次讀取一行內(nèi)容,返回list except BaseException as e: print(e) finally: if f: f.close()
字符編碼
encoding 參數(shù):讀取非 UTF-8 編碼的文本文件;errors 參數(shù):遇到編碼錯(cuò)誤后如何處理,最簡(jiǎn)單的方式是直接忽略。
f = open('/Users/wuxiaolong/Desktop/Python3Learn.txt', 'r', encoding='gbk', errors='ignore')
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Djang的model創(chuàng)建的字段和參數(shù)詳解
這篇文章主要介紹了Djang的model創(chuàng)建的字段和參數(shù)詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07python提取excel一列或多列數(shù)據(jù)另存為新表代碼實(shí)例
在日常的工作中,其實(shí)就是用鼠標(biāo)進(jìn)行數(shù)據(jù)篩選,然后選擇你想要這一行數(shù)據(jù)進(jìn)行復(fù)制,下面這篇文章主要給大家介紹了關(guān)于python提取excel一列或多列數(shù)據(jù)另存為新表的相關(guān)資料,需要的朋友可以參考下2024-06-06使用matplotlib實(shí)現(xiàn)在同一個(gè)窗口繪制多個(gè)圖形
這篇文章主要介紹了使用matplotlib實(shí)現(xiàn)在同一個(gè)窗口繪制多個(gè)圖形問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08詳解Python如何使用audioflux處理音頻數(shù)據(jù)
Python的audioflux庫(kù)是一個(gè)處理音頻數(shù)據(jù)的強(qiáng)大工具,旨在提供簡(jiǎn)單而強(qiáng)大的接口,用于音頻信號(hào)處理、分析和合成,下面就跟隨小編一起來學(xué)習(xí)一下它的具體使用吧2023-06-06Python OpenCV 彩色與灰度圖像的轉(zhuǎn)換實(shí)現(xiàn)
為了加快處理速度在圖像處理算法中,往往需要把彩色圖像轉(zhuǎn)換為灰度圖像,本文主要介紹了Python OpenCV 彩色與灰度圖像的轉(zhuǎn)換實(shí)現(xiàn),感興趣的可以了解一下2021-06-06python基于Selenium的web自動(dòng)化框架
這篇文章主要介紹了python基于Selenium的web自動(dòng)化框架,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07