day15-總結(jié)

一,內(nèi)置屬性

1.什么是內(nèi)置類屬性

聲明類的時(shí)候系統(tǒng)自動(dòng)添加的屬性(可能是字段也可能是對象屬性) 1)name
類的字段;類名.name - 獲取類的名字(字符串)
2)doc
類的字段;類.doc - 獲取類的說明文檔
3).class
對象的屬性;對象.class - 獲取對象對應(yīng)的類 (和type(對象)功能一樣)
4).dict
對象屬性;對象.dict - 將對象所有的屬性和對應(yīng)的值轉(zhuǎn)換成一個(gè)字典中的鍵值對(一個(gè)對象對應(yīng)一個(gè)字典)
類的字段;類.dict - 將類裝成一個(gè)字典,字典中的元素是類中所有的字段和對應(yīng)的值
5.module
類的字段;類.module - 獲取當(dāng)前類是在哪個(gè)模塊中聲明的(返回的是模塊的名字)
6.bases
類的字段;類.bases - 獲取當(dāng)前類的父類(返回的是一個(gè)元組)

二,私有化

1.訪問權(quán)限:公開,保護(hù),私有

公開 - 公開的屬性和方法在類的內(nèi)部,外部都能使用,也能被繼承
保護(hù) - 保護(hù)的屬性和方法在類的內(nèi)部能夠使用,外部不能使用,可以被繼承
私有 - 私有的屬性和方法只能在類的內(nèi)部使用,外部不能使用,也不能被繼承

2.python中屬性和方法的訪問權(quán)限

python類中所有的屬性和方法本質(zhì)都是公開的;私有化是假私有化,只是提示程序員這個(gè)屬性或者方法在外部不能使用,也不要去繼承
怎么私有化:在私有化的屬性名或者方法名前加''(注意:不能以''結(jié)尾)

三,屬性的getter和setter

1.什么是getter和setter

當(dāng)我們需要在獲取屬性值之前做點(diǎn)別的事情就需要給這個(gè)屬性添加getter;
當(dāng)需要給屬性賦值之前做別的事情,就需要給這個(gè)屬性添加setter

2.給屬性添加getter

1)屬性命名的時(shí)候前面加'_'
2)在裝飾器@property的后面聲明一個(gè)對象方法
a.將屬性名去掉下劃線作為方法名
b.方法除了self以外不需要其他參數(shù)
c.函數(shù)的返回值就是獲取這個(gè)屬性的時(shí)候得到的值
3)在外部使用屬性的時(shí)候,通過'對象.不帶下劃線的屬性'去使用
注意:獲取屬性值的時(shí)候,就會(huì)自動(dòng)調(diào)用getter對應(yīng)的函數(shù)

3.給屬性添加setter

屬性添加setter之前必須先添加getter
1)保證屬性名前有'_'
2)在@getter名.setter后面聲明對象方法
a.將屬性去掉下劃線作為方法名
b.需要一個(gè)self以外的慘呼
c.不需要返回值
3)在外部使用屬性的時(shí)候,通過'對象.不帶下劃線的屬性'去使用
注意:當(dāng)給屬性賦值的時(shí)候,實(shí)質(zhì)是調(diào)用setter對應(yīng)的方法
練習(xí):寫一個(gè)矩形類
1)有屬性:長,寬,面積,周長
2)要求從生活的角度看這個(gè)矩形

class Rectangle:
    def __init__(self,long, wide,area=None,perimeter=None):
        self._long=long
        self._wide=wide
        self._area=area
        self._perimeter=perimeter
    @property
    def long(self):
        return self._long
    @long.setter
    def long(self,value):
        if not (isinstance(value,int) or isinstance(value,float)):
            raise ValueError
        if value <= 0:
            raise ValueError
        self._long=value
    @property
    def wide(self):
        return self._long
    @wide.setter
    def wide(self, value):
        if not (isinstance(value, int) or isinstance(value ,float)):
            raise ValueError
        if value <= 0:
            raise ValueError
        self._wide=value
    @property
    def area(self):
        return self._long*self._wide
    @area.setter
    def area(self,value):
        raise ValueError
    @property
    def perimeter(self):
        return 2*(self._long+self._wide)
    @perimeter.setter
    def perimeter(self,value):
        raise ValueError

四,類方法和靜態(tài)方法

1.類中的函數(shù)

類中的方法分為:對象方法,類方法和靜態(tài)方法
1)對象方法
a.怎么聲明:直接聲明
b.怎么調(diào)用:用對象來調(diào)用
c.特點(diǎn):有指向當(dāng)前對象的self
d.什么時(shí)候用:如果實(shí)現(xiàn)函數(shù)的功能需要用到對象屬性,就使用對象方法

2)類方法
a.怎么聲明:聲明在@classmethod后面
b.怎么調(diào)用:用類來調(diào)用,'類.類方法'
c.特點(diǎn):有自帶的參數(shù)cls,表示當(dāng)前類;這個(gè)參數(shù)在調(diào)用的時(shí)候不用傳參,系統(tǒng)會(huì)自動(dòng)將當(dāng)前類傳給它;
cls:誰調(diào)用就指向誰(如果是對象指向的是對象對應(yīng)的類)
d.什么時(shí)候用:如果實(shí)現(xiàn)函數(shù)的功能不需要對象屬性,但是需要類的字段,就使用類方法

3)靜態(tài)方法
a.怎么聲明:聲明在@staticmethod后面
b.怎么調(diào)用:通過類來調(diào)用,'類.方法名'的形式
c.特點(diǎn):沒有默認(rèn)參數(shù)
d.什么時(shí)候用:實(shí)現(xiàn)函數(shù)的功能既不需要類也不需要對象,就使用靜態(tài)方法

五,繼承

1.什么是繼承

繼承就是讓字類直接擁有符類的屬性和方法
字類 - 繼承者
符類/超類 - 被繼承者

2.怎么繼承

1)語法
class 類名(父類1,父類2,...)
說明文檔
類的內(nèi)容
2)說明:
() - 固定寫法,如果省略相當(dāng)于(object)
聲明類的時(shí)候如果沒有寫父類,默認(rèn)繼承object(object又叫基類)
父類 - 一個(gè)類的父類可以有多個(gè),但是一般清空下只有一個(gè)(支持多繼承)

在字類中可以通過super()可以調(diào)用父類的方法

注意:super()只能在對象方法和類方法中使用
在字類中添加對象屬性,需要先通過super()去調(diào)用父類的_init_來繼承父類的對象屬性

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,697評論 1 32
  • 內(nèi)置函數(shù)屬性 1.聲明是內(nèi)置類屬性 聲明類的時(shí)候系統(tǒng)自動(dòng)添加的屬性(可能是字段也可能是對象屬性) 定制當(dāng)前類的對象...
    舉顆鳳梨閱讀 300評論 0 4
  • 什么是類,什么是對象類就是擁有相同功能相同屬性的對象的集合 抽象的概念對象是類的實(shí)例 類的聲明class 類名:...
    小逗比的奮斗史閱讀 150評論 0 0
  • 內(nèi)置類屬性 1.什么是內(nèi)置類屬性 聲明類的時(shí)候系統(tǒng)自動(dòng)添加的屬性(可能是字段,也可能是對象屬性) 1)name 類...
    茅人閱讀 194評論 0 0
  • 一、內(nèi)置類屬性 聲明類的時(shí)候系統(tǒng)自動(dòng)添加的屬性:字段、對象屬性。 __dict__ -將對象轉(zhuǎn)換成字典 對象屬性...
    浩子_唯一號閱讀 272評論 0 1

友情鏈接更多精彩內(nèi)容