總結(jié)Day16_類和對(duì)象(2)

===私有化===

1.屬性和方法的訪問(wèn)權(quán)限

??私有的:在類的外部不可以使用,也不可以繼承
??保護(hù)的:在類的外部不可以使用,可以繼承
??公開(kāi)的:在類的外部可以使用必盖,也可以被繼承

2.python的私有化

??python中屬性和方法的訪問(wèn)權(quán)限只有公開(kāi)隧出,但是提供了另一種私有化的方式。
??python中在屬性或者方法名前加__剔宪,就可以將屬性或者方法變成私有的(注意:只能兩__開(kāi)頭,不能__結(jié)尾)
??私有的屬性和方法只能在類的內(nèi)部使用壹无,不能在類的外面使用

class Person:
    __num2 = 62       # 私有化變量
    def __run(self):  # 私有化方法
        print('%s在跑步' % self.name)
3.python私有化的原理

??在名字前是__的屬性和方法前再加'_類名'去保存屬性和方法

class Person:
    __num2 = 62
    print(__num2)         # 不能打印num2
    print(_Person.__num2)  # 可以打印num2

===getter和setter(了解)===

1.應(yīng)用場(chǎng)景

??getter: 獲取對(duì)象屬性的值之前想要做點(diǎn)兒別的事情葱绒,就給這個(gè)屬性添加getter
??setter: 給對(duì)象屬性賦值之前想要做點(diǎn)兒別的事情,就給這個(gè)屬性添加setter

2.getter

??第一步:聲明屬性的時(shí)候在屬性名前加_
??第二步: 聲明函數(shù)(函數(shù)沒(méi)有除了self以外的參數(shù)斗锭,但是要與返回值地淀。返回值就是獲取屬性拿到的值)
??@property
??def 去掉的屬性名(self):
????做點(diǎn)別的事情
????返回屬性的值
??第三步:在類的外部通過(guò)對(duì)象.去掉
的屬性去獲取相關(guān)的屬性

class Person:
    def __init__(self, name=''):
        self.name = name
        self._age = 0
        self._week = 7    # 屬性名前有_,使用屬性的時(shí)候不要直接用

    @property
    def age(self):
        return self._age

    # 給age添加setter
    @age.setter
    def age(self, value):
        if not isinstance(value, int):
            raise ValueError
        if not (0 <= value <= 150):
            raise ValueError
        self._age = value
3.setter - 想要添加setter必須先要有g(shù)etter

??第一步:聲明屬性的時(shí)候在屬性名前加_
??第二步: 聲明函數(shù)(函數(shù)除了self以外還需要一個(gè)參數(shù)岖是,沒(méi)有返回值帮毁。這兒的參數(shù)代表給屬性賦的值)
??@屬性名去掉.setter
??def 去掉
的屬性名(self, 參數(shù)):
????做點(diǎn)別的事情
????給屬性賦值
??第三步:在類的外部通過(guò)對(duì)象.去掉_的屬性去給相關(guān)屬性賦值

class Person:
    def __init__(self, name=''):
        self.name = name
        self._age = 0
        self._week = 7    # 屬性名前有_,使用屬性的時(shí)候不要直接用

    # 給week添加getter
    @property
    def week(self):
        if self._week < 7:
            return '星期%d' % self._week
        else:
            return '星期天'

===繼承===

1.什么是繼承

??一個(gè)類繼承另外一個(gè)類豺撑,其中會(huì)產(chǎn)生繼承者和被繼承者烈疚。這兒的繼承者叫子類,被繼承者叫父類/超類
??繼承就是讓子類直接擁有父類的方法和屬性

2.怎么繼承

語(yǔ)法:
??class 類名(父類列表):
??類的內(nèi)容

說(shuō)明:
??a.python中所有的類都是直接或者間接繼承自基類object
????class 類名: ===> class 類名(object):
??b.python中的繼承支持多繼承聪轿, 父類列表中可以有多個(gè)類爷肝,多個(gè)類之間用逗號(hào)隔開(kāi)

3.能繼承哪些東西: 所有的屬性和方法都能夠繼承

注意:
??a.slots的值繼承后沒(méi)有效果
??b.在類中給slots賦值后,當(dāng)前類的對(duì)象不能使用dict;但是這個(gè)類的子類對(duì)象可以使用dict,只是dict中沒(méi)有從父類繼承下來(lái)的對(duì)象屬性屹电,只有在子類中添加的對(duì)象屬性
??c.如果父類沒(méi)有給slots賦值阶剑,直接給子類的slots,無(wú)效危号!

===添加方法===

1.添加方法

??直接在子類中聲明新的方法

class Person(object):
    num = 61

    def __init__(self,name='zhangsan', age=0, sex='男'):
        self.name = name
        self.age = age
        self.sex = sex
        self.__face = 60

    def eat(self, food):
        print('%s在吃%s' % (self.name, food))

    @classmethod
    def show_num(cls):
        print('人類的數(shù)量:%d' % cls.num)

class Student(Person):
    num2 = 100

    # 添加方法
    def study(self):
        print('%s在寫(xiě)代碼' % self.name)
2.重寫(xiě)方法

??在子類中重新實(shí)現(xiàn)父類的方法 - 完全重寫(xiě)
??保留父類的功能在子類中添加新的功能 - 部分重寫(xiě)(在子類方法中通過(guò)'super().'的方式調(diào)用父類方法)

@classmethod
    def show_num(cls):
        print('學(xué)生數(shù)量:%d' % cls.num)
3.類中函數(shù)的調(diào)用過(guò)程

??回到函數(shù)聲明的位置:先看當(dāng)前類中是否有方法牧愁,如果有就直接調(diào)用當(dāng)前類中的方法;沒(méi)有就去看父類中有沒(méi)有這個(gè)方法外莲;如果父類中也沒(méi)有就看父類的父類中有沒(méi)有....直到找到object類猪半,如果object中也沒(méi)有就報(bào)錯(cuò)兔朦!

    def eat(self, food):
        super().eat(food)
        print('吃飽了')

===添加屬性===

1.類的字段

??直接在子類中聲明新的字段

class Person(object):
    num = 61


class Student(Person):
    num2 = 100
2.添加對(duì)象屬性

??對(duì)象屬性其實(shí)是通過(guò)繼承init方法繼承下來(lái)的

class Animal:

    def __init__(self, age):
        self.age = age
        self.color = '灰色'


class Dog(Animal):
    def __init__(self, name, age):
        # 調(diào)用父類的init方法來(lái)繼承父類的對(duì)象屬性
        super().__init__(age)
        self.name = name


class Cat(Animal):
    pass

===運(yùn)算符重載===

1.什么是運(yùn)算符重載
??通過(guò)實(shí)現(xiàn)類中相應(yīng)的魔法方法來(lái)讓當(dāng)前類的對(duì)象支持相應(yīng)的運(yùn)算符

??注意:python中所有的數(shù)據(jù)類型都是類; 所有的數(shù)據(jù)都是對(duì)象

class Student(object):
    def __init__(self, name='', age=0, score=0):
        self.name = name
        self.age = age
        self.score = score

    def __repr__(self):
        return '<' + str(self.__dict__)[1:-1] + '>'

    # 實(shí)現(xiàn)'+'對(duì)應(yīng)的魔法方法,讓兩個(gè)學(xué)生對(duì)象能夠進(jìn)行+操作
    # self和other的關(guān)系: self+other    ==> self.__add__(other)
    # 返回值就是運(yùn)算結(jié)果
    def __add__(self, other):
        # a.支持Student+Student:
        return self.age + other.age
        # b.支持Student+數(shù)字
        # return self.age + other

    # self * other
    # 將other當(dāng)成數(shù)字
    def __mul__(self, other):
        return self.name * other

    # self和other都是學(xué)生對(duì)象
    # 注意:大于和小于運(yùn)算符是需要重載一個(gè)就行
    def __gt__(self, other):
        return self.score > other.score

===內(nèi)存管理===

1.數(shù)據(jù)的存儲(chǔ)

??內(nèi)存分為棧區(qū)間和堆區(qū)間磨确;從底層來(lái)看沽甥,棧區(qū)間的內(nèi)存的開(kāi)辟和釋放是系統(tǒng)自動(dòng)管理的,堆區(qū)間的內(nèi)存是由程序員通過(guò)代碼開(kāi)辟(malloc)和釋放的
??從python語(yǔ)言角度乏奥,棧區(qū)間的內(nèi)存的開(kāi)辟和釋放是系統(tǒng)自動(dòng)管理的摆舟,堆區(qū)間的內(nèi)存關(guān)鍵也已經(jīng)封裝好了,程序員也不需要寫(xiě)代碼來(lái)開(kāi)辟空間和釋放空間

??a.python中變量本身是存在棧區(qū)間的,函數(shù)調(diào)用過(guò)程是在棧區(qū)間; 對(duì)象都是存在堆區(qū)間(python中所有數(shù)據(jù)都是對(duì)象)
??b.變量賦值過(guò)程:先堆區(qū)間開(kāi)辟空間將數(shù)據(jù)存起來(lái)邓了, 然將數(shù)據(jù)對(duì)應(yīng)的地址存到棧區(qū)間的變量中恨诱。
??數(shù)字和字符串比較特殊,賦值的時(shí)候不會(huì)直接開(kāi)辟空間骗炉,而是先檢測(cè)之前有沒(méi)有存儲(chǔ)過(guò)這個(gè)數(shù)據(jù)照宝,如果有就用之前的數(shù)據(jù)的地址

2.內(nèi)存釋放(垃圾回收機(jī)制)原理:

??python中的每個(gè)對(duì)象都有一個(gè)屬性叫'引用計(jì)數(shù)',表示當(dāng)前對(duì)象的引用的個(gè)數(shù)。判斷一個(gè)對(duì)象是否銷毀就看對(duì)象的引用計(jì)數(shù)是否為0句葵;
為0的就銷毀厕鹃,不為0的就不銷毀。
??getrefcount函數(shù):
??getrefcount(對(duì)象) -> 獲取對(duì)象的引用計(jì)數(shù)

list1 = [1, 2]
print(getrefcount(list1))      # 2

# 使用不同的變量存對(duì)象地址會(huì)增加引用計(jì)數(shù)
list2 = list1
print(getrefcount(list1))     # 3

[1, list1]
print(getrefcount(list1))    # 3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末乍丈,一起剝皮案震驚了整個(gè)濱河市剂碴,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌诗赌,老刑警劉巖汗茄,帶你破解...
    沈念sama閱讀 221,198評(píng)論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異铭若,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)递览,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門(mén)叼屠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人绞铃,你說(shuō)我怎么就攤上這事镜雨。” “怎么了儿捧?”我有些...
    開(kāi)封第一講書(shū)人閱讀 167,643評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵荚坞,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我菲盾,道長(zhǎng)颓影,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,495評(píng)論 1 296
  • 正文 為了忘掉前任懒鉴,我火速辦了婚禮诡挂,結(jié)果婚禮上碎浇,老公的妹妹穿的比我還像新娘。我一直安慰自己璃俗,他們只是感情好奴璃,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,502評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著城豁,像睡著了一般苟穆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上唱星,一...
    開(kāi)封第一講書(shū)人閱讀 52,156評(píng)論 1 308
  • 那天鞭缭,我揣著相機(jī)與錄音,去河邊找鬼魏颓。 笑死岭辣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的甸饱。 我是一名探鬼主播沦童,決...
    沈念sama閱讀 40,743評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼叹话!你這毒婦竟也來(lái)了偷遗?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,659評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤驼壶,失蹤者是張志新(化名)和其女友劉穎氏豌,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體热凹,經(jīng)...
    沈念sama閱讀 46,200評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泵喘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,282評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了般妙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纪铺。...
    茶點(diǎn)故事閱讀 40,424評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖碟渺,靈堂內(nèi)的尸體忽然破棺而出鲜锚,到底是詐尸還是另有隱情,我是刑警寧澤苫拍,帶...
    沈念sama閱讀 36,107評(píng)論 5 349
  • 正文 年R本政府宣布芜繁,位于F島的核電站,受9級(jí)特大地震影響绒极,放射性物質(zhì)發(fā)生泄漏骏令。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,789評(píng)論 3 333
  • 文/蒙蒙 一集峦、第九天 我趴在偏房一處隱蔽的房頂上張望伏社。 院中可真熱鬧抠刺,春花似錦、人聲如沸摘昌。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,264評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)聪黎。三九已至罕容,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間稿饰,已是汗流浹背锦秒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,390評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喉镰,地道東北人旅择。 一個(gè)月前我還...
    沈念sama閱讀 48,798評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像侣姆,于是被迫代替她去往敵國(guó)和親生真。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,435評(píng)論 2 359

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

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔捺宗,今天18年5月份再次想寫(xiě)文章柱蟀,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 2,767評(píng)論 2 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,109評(píng)論 1 32
  • """author = drh""""""類和對(duì)象 1.類的聲明class 類名:類的內(nèi)容 2.屬性 - 聲明在類...
    LittleBear_6c91閱讀 382評(píng)論 0 0
  • 唱詩(shī)吟誦长已,夢(mèng)逢夫子折舊。渡影瀾癲昼牛,氳透歲月殘頭术瓮。筆墨清淡,難摹深情匾嘱,然低眉抬手斤斧,志顯其中。 三年前的端午有幸停泊在...
    五色浮元子_閱讀 729評(píng)論 2 2
  • 依然用app.vue練手 首先先寫(xiě)事件發(fā)生時(shí)所調(diào)用的方法 data里面寫(xiě)的只是返回的數(shù)據(jù)霎烙,可以是空;事件觸發(fā)的方法...
    劉大閱讀 240評(píng)論 0 0