Python面向?qū)ο蟮膶W(xué)習(xí)

思維導(dǎo)圖

  • 包粘勒、模塊管理
  • 私有的本質(zhì)
  • 面向?qū)ο蟮娜筇匦?/li>
  • 多繼承的順序問(wèn)題(不提議多繼承)
  • 繼承 中的方法重寫(xiě):兩種方式 覆蓋 和擴(kuò)展(super) 其實(shí)沒(méi)多大區(qū)別
  • 類(lèi)的屬性糕殉、類(lèi)方法、靜態(tài)方法 實(shí)例屬性和實(shí)例方法
  • 單例
  • 異常 try except else finally
  • 文件
  • eval函數(shù)

code

  • objects項(xiàng)目

面向?qū)ο?/h1>
  • 內(nèi)置函數(shù) 使用函數(shù)dir()可查看所有的內(nèi)置變量

  • 舉例說(shuō)明 注意:類(lèi)名和文件名不能一致 否則會(huì)報(bào)錯(cuò)

calss 類(lèi)名:
  def func1(self, arg1...):
    pass
  • 方法的定義格式幾乎和學(xué)過(guò)的函數(shù)一樣 區(qū)別在于 第一個(gè)參數(shù)必須是 self

  • 創(chuàng)建對(duì)象 對(duì)象變量 = 類(lèi)名()

  • init中構(gòu)造的類(lèi)變量會(huì)被pycharm記住, 在使用類(lèi)對(duì)象的時(shí)候會(huì)有提示痕寓,在普通方法中構(gòu)造的變量也會(huì)有提示蠢莺,但是在類(lèi)對(duì)象調(diào)用這個(gè)方法之前使用這個(gè)變量會(huì)報(bào)錯(cuò) 因?yàn)檫@個(gè)變量還沒(méi)有固賦值(此處所說(shuō)的變量是公開(kāi)的寒匙,不是私有的)

  • python中的私有并非真正的私有, 只是將這個(gè)變量或者方法的名字改掉了 比如我有一個(gè)student類(lèi)躏将,類(lèi)中有一個(gè)__age私有變量锄弱, 那么 在外部使用 stu._student__age就可以訪(fǎng)問(wèn)到__age這個(gè)變量 私有方法亦是如此

  • python繼承中,不會(huì)自動(dòng)調(diào)用父類(lèi)的構(gòu)造函數(shù)必須手動(dòng)調(diào)用

    def __init__(self):
        print("this is __init__ function in subbird")
        super(subbird, self).__init__() # 也可以是  super().__init__()
class cat(animal):
    def __init__(self):
        super().__init__()
        print("__init__ in cat class")
  • 繼承的方法也是
    def eat(self):
        print("eat in cat")
        super().eat()
  • 在子類(lèi)中 即使使用 super()._animal__age 也不能訪(fǎng)問(wèn)到父類(lèi)的私有成員
  • python中的類(lèi)屬性和對(duì)象屬性
    • 類(lèi)屬性是指 在類(lèi)中定義的屬性
    • 對(duì)象屬性是指在構(gòu)造方法中定義的屬性
    • 調(diào)用類(lèi)屬性可以使用 類(lèi).屬性 也可以使用對(duì)象.屬性 但是推薦使用類(lèi).屬性
    • 注意:當(dāng)給類(lèi)屬性賦值的時(shí)候祸憋,不能使用對(duì)象.屬性 = val 否則會(huì)在對(duì)象中增加一個(gè)屬性 而不是給類(lèi)屬性賦值
class subbird(bird2, bird):
    count = 0
    __num = 0
    def __init__(self):
        subbird.count += 1
        subbird.__num += 1
        print("this is __init__ function in subbird")
        super(subbird, self).__init__()

    def bark(self):
        print("bark in subbird")
        super(subbird, self).bark()

sub1 = subbird()
print(subbird.count)

print(subbird._subbird__num)

sub1.count = 100 #
print(sub1.count) # 100
print(subbird.count) # 2
  • 類(lèi)方法可以調(diào)用類(lèi)屬性和其他的類(lèi)方法
  • 類(lèi)方法的定義
  @classmethod
    def method1(cls):
        pass
  • 類(lèi)方法的調(diào)用: 類(lèi)名.類(lèi)方法 類(lèi)對(duì)象.類(lèi)方法

靜態(tài)方法

  • 應(yīng)用場(chǎng)景

    • 既 不需要 訪(fǎng)問(wèn) 實(shí)例屬性 或者調(diào)用 實(shí)例方法
    • 也 不需要 訪(fǎng)問(wèn) 類(lèi)屬性 或者調(diào)用 類(lèi)方法
  • 定義

@staticmethod
    def method2():
        print("this is static method in people class")
        pass
  • 調(diào)用 類(lèi)名.靜態(tài)方法 對(duì)象名.靜態(tài)方法

單例模式

new 方法

  • 是object的內(nèi)置靜態(tài)方法
  • 作用:
    • 在內(nèi)存中為對(duì)象分配空間
    • 返回對(duì)象的引用
    • Python 的解釋器獲得對(duì)象的 引用 后会宪,將引用作為 第一個(gè)參數(shù),傳遞給 init 方法
  • 重寫(xiě)方法:
  def __new__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = super().__new__(cls)
        return cls.instance

舉例說(shuō)明:

class singlepeople:
    instance = None
    init_flag = False

    def __init__(self):
        if not singlepeople.init_flag:
            singlepeople.init_flag = True
        else:
            return
        self.name = None
        pass
    
    def __new__(cls, *args, **kwargs):
        if cls.instance is None:
            cls.instance = super().__new__(cls)
        return cls.instance

---
from models.singlepeople import singlepeople

p = singlepeople()
print(p)
p.name = "smx"
print(p.name)

p2 = singlepeople()
# p2.name = "xyj"
print(p2)
print(p2.name)
print(p.name)

異常

目標(biāo)

  • 異常的概念
  • 捕獲異常
  • 傳遞異常
  • 拋出異常

捕獲異常

  • 簡(jiǎn)單的捕獲異常語(yǔ)法
try:
    # 提示用戶(hù)輸入一個(gè)數(shù)字
    num = int(input("請(qǐng)輸入數(shù)字:"))
except:
    print("請(qǐng)輸入正確的數(shù)字")
  • 錯(cuò)誤類(lèi)型捕獲
  • 語(yǔ)法
try:
    # 嘗試執(zhí)行的代碼
    pass
except 錯(cuò)誤類(lèi)型1:
    # 針對(duì)錯(cuò)誤類(lèi)型1蚯窥,對(duì)應(yīng)的代碼處理
    pass
except 錯(cuò)誤類(lèi)型2:
    # 針對(duì)錯(cuò)誤類(lèi)型2掸鹅,對(duì)應(yīng)的代碼處理
    pass
except (錯(cuò)誤類(lèi)型3, 錯(cuò)誤類(lèi)型4):
    # 針對(duì)錯(cuò)誤類(lèi)型3 和 4,對(duì)應(yīng)的代碼處理
    pass
except Exception as result:
    # 打印錯(cuò)誤信息
    print(result)
else:
    # 沒(méi)有異常才會(huì)執(zhí)行的代碼
    pass
finally:
    # 無(wú)論是否有異常拦赠,都會(huì)執(zhí)行的代碼
    print("無(wú)論是否有異常巍沙,都會(huì)執(zhí)行的代碼")
  • 舉例:
try:
    num = int(input("請(qǐng)輸入整數(shù):"))
    result = 8 / num
    print(result)
except ValueError:
    print("請(qǐng)輸入正確的整數(shù)")
except ZeroDivisionError:
    print("除 0 錯(cuò)誤")
except Exception as result:
    print("未知錯(cuò)誤 %s" % result)
else:
    print("正常執(zhí)行")
finally:
    print("執(zhí)行完成,但是不保證正確")

拋出異常

  • 代碼
 # 1> 創(chuàng)建異常對(duì)象 - 使用異常的錯(cuò)誤信息字符串作為參數(shù)
    ex = Exception("密碼長(zhǎng)度不夠")

    # 2> 拋出異常對(duì)象
    raise ex

模塊和包

目標(biāo)

  • 模塊
  • 發(fā)布模塊

模塊

  • 模塊是 Python 程序架構(gòu)的一個(gè)核心概念
  • 每一個(gè)以擴(kuò)展名 py 結(jié)尾的 Python 源代碼文件都是一個(gè) 模塊
  • 模塊名 同樣也是一個(gè) 標(biāo)識(shí)符荷鼠,需要符合標(biāo)識(shí)符的命名規(guī)則
  • 在模塊中定義的 全局變量 句携、函數(shù)、類(lèi) 都是提供給外界直接使用的 工具
  • 模塊 就好比是 工具包允乐,要想使用這個(gè)工具包中的工具矮嫉,就需要先 導(dǎo)入 這個(gè)模塊

導(dǎo)入模塊

  • import 導(dǎo)入
import module
import module as md
  • from import 導(dǎo)入
from module import *
  • 模塊搜索順序


    圖片.png
  • 原則


    圖片.png

圖片.png

發(fā)布模塊

圖片.png

圖片.png

圖片.png

文件

目標(biāo)

  • 文件
  • 文件操作
  • 文件、文件夾的常用操作
  • 文本文件的編碼方式

文件讀寫(xiě)

圖片.png

圖片.png

圖片.png

圖片.png

圖片.png

圖片.png

文件目錄常用操作

圖片.png

文件的編碼格式

圖片.png

圖片.png

eval函數(shù)

圖片.png

教程筆記圖

image.png
  • 初始化方法


    image.png

    image.png

    image.png
  • 圖片.png

    圖片.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末牍疏,一起剝皮案震驚了整個(gè)濱河市敞临,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌麸澜,老刑警劉巖挺尿,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異炊邦,居然都是意外死亡编矾,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門(mén)馁害,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)窄俏,“玉大人,你說(shuō)我怎么就攤上這事碘菜“简冢” “怎么了限寞?”我有些...
    開(kāi)封第一講書(shū)人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)仰坦。 經(jīng)常有香客問(wèn)我履植,道長(zhǎng),這世上最難降的妖魔是什么悄晃? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任玫霎,我火速辦了婚禮,結(jié)果婚禮上妈橄,老公的妹妹穿的比我還像新娘庶近。我一直安慰自己,他們只是感情好眷蚓,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布鼻种。 她就那樣靜靜地躺著,像睡著了一般沙热。 火紅的嫁衣襯著肌膚如雪叉钥。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,166評(píng)論 1 284
  • 那天校读,我揣著相機(jī)與錄音沼侣,去河邊找鬼。 笑死歉秫,一個(gè)胖子當(dāng)著我的面吹牛蛾洛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雁芙,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼轧膘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了兔甘?” 一聲冷哼從身側(cè)響起谎碍,我...
    開(kāi)封第一講書(shū)人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎洞焙,沒(méi)想到半個(gè)月后蟆淀,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澡匪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年熔任,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唁情。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疑苔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甸鸟,到底是詐尸還是另有隱情惦费,我是刑警寧澤兵迅,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站薪贫,受9級(jí)特大地震影響恍箭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜后雷,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一季惯、第九天 我趴在偏房一處隱蔽的房頂上張望吠各。 院中可真熱鬧臀突,春花似錦、人聲如沸贾漏。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)纵散。三九已至梳码,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伍掀,已是汗流浹背掰茶。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜜笤,地道東北人濒蒋。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像把兔,于是被迫代替她去往敵國(guó)和親沪伙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容