day16-類(lèi)和對(duì)象


一抬闯、類(lèi)的繼承

1.基本概念

  • 父類(lèi)(超類(lèi)):被繼承的類(lèi)

  • 子類(lèi):去繼承父類(lèi)的類(lèi)

  • 繼承定義:讓子類(lèi)直接擁有父類(lèi)的屬性和方法丙躏,python中所有的類(lèi)都是直接或者間接的繼承自object

  • 注意:繼承后父類(lèi)的東西不會(huì)減少

2.繼承方法和內(nèi)容

  • 方法:

    • a.class 類(lèi)名(父類(lèi)):....
    • b.class 類(lèi)名: == class 類(lèi)名(object):
  • 內(nèi)容:對(duì)象屬性、對(duì)象方法矿辽、類(lèi)的字段拍霜、類(lèi)方法、靜態(tài)方法都可以繼承

  • 注意:
    如果設(shè)置了__slots__會(huì)約束當(dāng)前類(lèi)的對(duì)象屬性荤西,并且會(huì)導(dǎo)致當(dāng)前類(lèi)的對(duì)象的dict屬性不存在;

    繼承后伍俘,__slots__的值不會(huì)約束到子類(lèi)的對(duì)象屬性邪锌,但是會(huì)導(dǎo)致子類(lèi)對(duì)象的dict只有在當(dāng)前類(lèi)中添加的屬性


二、類(lèi)的重寫(xiě)

1.添加新的方法

  • 直接在子類(lèi)中聲明新的方法癌瘾,新的方法只能通過(guò)子類(lèi)來(lái)使用

2.重寫(xiě)

  • a.子類(lèi)繼承父類(lèi)的方法觅丰,在子類(lèi)中去重新實(shí)現(xiàn)這個(gè)方法的功能 -- 完全重寫(xiě)

  • b.在子類(lèi)方法中通過(guò)super().父類(lèi)方法去保留父類(lèi)對(duì)應(yīng)的方法的功能

3.類(lèi)中的函數(shù)的調(diào)用過(guò)程

  • 類(lèi).方法(), 對(duì)象.方法()

    先看當(dāng)前類(lèi)是否有這個(gè)方法,如果有就直接調(diào)用當(dāng)前類(lèi)中相應(yīng)的方法妨退;

    如果沒(méi)有就去當(dāng)前的父類(lèi)中去看有沒(méi)有這個(gè)方法妇萄,如果有就調(diào)用父類(lèi)的這個(gè)方法;

    如果父類(lèi)中也沒(méi)有這個(gè)方法咬荷,就去父類(lèi)的父類(lèi)中找嚣伐,依次類(lèi)推直到找到為止。

    如果找到基類(lèi)object萍丐,還沒(méi)有找到這個(gè)方法,程序才異常

4.添加屬性

  • a.添加字段:
    就直接在子類(lèi)中聲明新的字段

  • b.添加對(duì)象對(duì)象屬性:
    子類(lèi)是通過(guò)繼承父類(lèi)的init方法來(lái)繼承的父類(lèi)的對(duì)象屬性


三放典、運(yùn)算符重載

1.定義

  • 運(yùn)算符重載: 通過(guò)實(shí)現(xiàn)類(lèi)響應(yīng)的魔法方法逝变,來(lái)讓類(lèi)的對(duì)象支持相應(yīng)的運(yùn)算符(+, -, > ,< 等)

2.實(shí)現(xiàn)方法

    #  __gt__就是 > 對(duì)應(yīng)的魔法方法
    def __gt__(self, other):
        # self -> 指的是大于符號(hào)前面的值, other -> 指的是>符號(hào)后面的值
        return self.score > other.score

    # __lt__是 < 對(duì)應(yīng)的魔法方法
    # 注意:gt和lt只需要實(shí)現(xiàn)一個(gè)就可以了
    def __lt__(self, other):
        return self.score < other.score

    def __add__(self, other):
        return self.score + other.score

四奋构、內(nèi)存管理機(jī)制

1. python中的內(nèi)存管理

  • 定義:內(nèi)存管理 --> 自動(dòng)管理 --> 垃圾回收機(jī)制

  • 內(nèi)存結(jié)構(gòu)中分棧區(qū)間和堆區(qū)間壳影,棧區(qū)間中內(nèi)存是系統(tǒng)自動(dòng)開(kāi)啟自動(dòng)釋放。堆區(qū)間的內(nèi)存需要手動(dòng)申請(qǐng)手動(dòng)釋放弥臼。

  • python中的數(shù)據(jù)都是存在堆中的宴咧,數(shù)據(jù)的地址都是在棧區(qū)間。python中垃圾回收機(jī)制是用來(lái)管理堆中的內(nèi)存的釋放

2. 內(nèi)存管理步驟

  • a.內(nèi)存的開(kāi)辟
    python中將值賦給變量的是径缅,會(huì)先在堆中開(kāi)辟空間將數(shù)據(jù)存起來(lái)掺栅,然后再數(shù)據(jù)對(duì)應(yīng)的地址返回給變量,存在棧中纳猪。
    但是如果數(shù)據(jù)是數(shù)字和字符串氧卧,會(huì)先緩存區(qū)中查看這個(gè)數(shù)據(jù)之前是否已經(jīng)創(chuàng)建過(guò),如果沒(méi)有就去創(chuàng)建空間存數(shù)據(jù)氏堤,然后將地址返回沙绝。
    如果之前已經(jīng)創(chuàng)建過(guò)就直接將之前的地址返回

  • b.內(nèi)存的釋放 --> 垃圾回收機(jī)制
    系統(tǒng)每隔一定的時(shí)間就會(huì)去檢測(cè)當(dāng)前程序中所有的對(duì)象的引用計(jì)數(shù)值是否為0;
    如果對(duì)象的引用計(jì)數(shù)是0對(duì)象對(duì)應(yīng)的內(nèi)存就會(huì)被銷(xiāo)毀,如果不是0就不銷(xiāo)毀

  • c.引用計(jì)數(shù)
    每一個(gè)對(duì)象都有引用計(jì)數(shù)屬性闪檬,用來(lái)存儲(chǔ)當(dāng)前對(duì)象被引用的次數(shù)星著。
    可以通過(guò)sys模塊中的getrefcount去獲取一個(gè)對(duì)象的引用計(jì)數(shù)值


五、抽象類(lèi)和抽象方法

1.抽象類(lèi)

  • 定義:只能被繼承不能實(shí)例化(不能創(chuàng)建對(duì)象)

  • 聲明:類(lèi)繼承abc模塊中的ABCMeta粗悯,繼承的時(shí)候需要加參數(shù)metaclass虚循。
    并且要通過(guò)abstractmethod來(lái)聲明抽象方法

  • 例子:

import abc


class Shape(metaclass=abc.ABCMeta):
    # 聲明抽象方法
    @abc.abstractmethod
    def draw(self):
        pass

    @abc.abstractmethod
    def area(self):
        pass

2.抽象方法

  • 定義:聲明的時(shí)候不用實(shí)現(xiàn),在子類(lèi)中必須去重寫(xiě)的方法
  • 注意:子類(lèi)繼承一個(gè)抽象類(lèi)为黎,必須在子類(lèi)中實(shí)現(xiàn)抽象類(lèi)中所有的抽象方法
  • 例子:
class Circle(Shape):
    def draw(self):
        print('畫(huà)圖形')

    def area(self):
        print('面積')
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末邮丰,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子铭乾,更是在濱河造成了極大的恐慌剪廉,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,651評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炕檩,死亡現(xiàn)場(chǎng)離奇詭異斗蒋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)笛质,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,468評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)泉沾,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人妇押,你說(shuō)我怎么就攤上這事跷究。” “怎么了敲霍?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,931評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵俊马,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我肩杈,道長(zhǎng)柴我,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,218評(píng)論 1 292
  • 正文 為了忘掉前任扩然,我火速辦了婚禮艘儒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘夫偶。我一直安慰自己界睁,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,234評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布兵拢。 她就那樣靜靜地躺著晕窑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪卵佛。 梳的紋絲不亂的頭發(fā)上杨赤,一...
    開(kāi)封第一講書(shū)人閱讀 51,198評(píng)論 1 299
  • 那天敞斋,我揣著相機(jī)與錄音,去河邊找鬼疾牲。 笑死植捎,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阳柔。 我是一名探鬼主播焰枢,決...
    沈念sama閱讀 40,084評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼舌剂!你這毒婦竟也來(lái)了济锄?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,926評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤霍转,失蹤者是張志新(化名)和其女友劉穎荐绝,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體避消,經(jīng)...
    沈念sama閱讀 45,341評(píng)論 1 311
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡低滩,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,563評(píng)論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了岩喷。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恕沫。...
    茶點(diǎn)故事閱讀 39,731評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纱意,靈堂內(nèi)的尸體忽然破棺而出婶溯,到底是詐尸還是另有隱情,我是刑警寧澤偷霉,帶...
    沈念sama閱讀 35,430評(píng)論 5 343
  • 正文 年R本政府宣布爬虱,位于F島的核電站,受9級(jí)特大地震影響腾它,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜死讹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,036評(píng)論 3 326
  • 文/蒙蒙 一瞒滴、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赞警,春花似錦妓忍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,676評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至笤虫,卻和暖如春旁瘫,著一層夾襖步出監(jiān)牢的瞬間祖凫,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,829評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工酬凳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留惠况,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,743評(píng)論 2 368
  • 正文 我出身青樓宁仔,卻偏偏與公主長(zhǎng)得像稠屠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子翎苫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,629評(píng)論 2 354

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

  • 設(shè)計(jì)模式概述 在學(xué)習(xí)面向?qū)ο笃叽笤O(shè)計(jì)原則時(shí)需要注意以下幾點(diǎn):a) 高內(nèi)聚权埠、低耦合和單一職能的“沖突”實(shí)際上,這兩者...
    彥幀閱讀 3,741評(píng)論 0 14
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類(lèi)型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,097評(píng)論 1 32
  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 29,373評(píng)論 8 265
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法煎谍,類(lèi)相關(guān)的語(yǔ)法攘蔽,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法粱快,異常的語(yǔ)法秩彤,線程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,623評(píng)論 18 399
  • Cases of the Day Tension Headache (TH) 今天來(lái)了一位有嚴(yán)重Tension H...
    妮兒妮閱讀 183評(píng)論 0 1