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)庫
Python 本身帶著一些標(biāo)準(zhǔn)的模塊庫,比如 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ù)庫,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)文章
Python導(dǎo)入父文件夾中模塊并讀取當(dāng)前文件夾內(nèi)的資源
這篇文章主要給大家介紹了關(guān)于Python導(dǎo)入父文件夾中模塊并讀取當(dāng)前文件夾內(nèi)資源的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Python實(shí)現(xiàn)在數(shù)字中添加千位分隔符的方法小結(jié)
在數(shù)據(jù)處理和數(shù)據(jù)可視化中,經(jīng)常需要對(duì)大數(shù)值進(jìn)行格式化,其中一種常見的需求是在數(shù)字中添加千位分隔符,本文為大家整理了三種常見方法,希望對(duì)大家有所幫助2024-01-01
python創(chuàng)建屬于自己的單詞詞庫 便于背單詞
這篇文章主要為大家詳細(xì)介紹了python創(chuàng)建屬于自己的單詞詞庫,便于背單詞,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-07-07
解決Windows下PowerShell無法進(jìn)入Python虛擬環(huán)境問題
這篇文章主要介紹了解決Windows下PowerShell無法進(jìn)入Python虛擬環(huán)境問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02
一文搞懂Python讀取text,CSV,JSON文件的方法
文件處理是一種用于創(chuàng)建文件、寫入數(shù)據(jù)和從中讀取數(shù)據(jù)的過程,Python 擁有豐富的用于處理不同文件類型的包,從而使得我們可以更加輕松方便的完成文件處理的工作,本文將來為大家詳細(xì)講講2022-06-06
python 多進(jìn)程隊(duì)列數(shù)據(jù)處理詳解
今天小編就為大家分享一篇python 多進(jìn)程隊(duì)列數(shù)據(jù)處理詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-12-12
python批量制作雷達(dá)圖的實(shí)現(xiàn)方法
本文通過實(shí)例代碼介紹了如何用python批量制作雷達(dá)圖的實(shí)現(xiàn)方法,下面一起來看看如何實(shí)現(xiàn)的。2016-07-07
Python實(shí)現(xiàn)序列化及csv文件讀取
這篇文章主要介紹了Python實(shí)現(xiàn)序列化及csv文件讀取,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01
詳解在Python中創(chuàng)建條形圖追趕動(dòng)畫
動(dòng)畫是使可視化更具吸引力和用戶吸引力的好方法。它幫助我們以有意義的方式展示數(shù)據(jù)可視化。Matplotlib是一個(gè)非常流行的數(shù)據(jù)可視化庫,通常用于數(shù)據(jù)的圖形表示以及使用內(nèi)置函數(shù)的動(dòng)畫。本文將用Matplotlib繪制條形圖追趕動(dòng)畫,需要的可以參考一下2022-03-03
Python網(wǎng)絡(luò)編程之HTTP協(xié)議的python應(yīng)用
HTTP是在網(wǎng)絡(luò)上傳輸HTML的協(xié)議,用于瀏覽器和服務(wù)器的通信,這篇文章主要介紹了Python網(wǎng)絡(luò)編程之HTTP協(xié)議的python應(yīng)用,需要的朋友可以參考下2022-11-11

