day15總結

內置類屬性

1.什么是內置類屬性

聲明類的時候系統(tǒng)自動添加的屬性(可能是字段,也可能是對象屬性)

1)name

類的字段;類名.name -- 獲取類的名字(字符串)

2)doc

類的字段;類名.doc -- 獲取類的說明文檔

3)class

對象屬性;對象.class -- 獲取對象對應的類
print(type(p1)) #type和它功能相似
print(p1.class)

4)dict (重要,對象轉換成字典,字典轉換成對象)

對象屬性;對象.dict -- 將對象中(init里)所有的屬性和對應的值轉換成一個字典中的鍵值對(一個對象一個字典)

類的字段;類.dict -- 將類轉換成一個字典,字典中的所有元素是類中所有的字段和對應的值

5)module

類的字段;類.module--獲取當前類是在哪個模塊中聲明的(返回值的是模塊的名字)

6)bases

類的字段;類名.bases - 獲取當前類的父類(返回的是一個元組)

私有化

1.訪問權限:公開,保護,私有

1)公開 - 公開的屬性和方法是在類的內部,外部能夠使用也能繼承
2)保護 - 保護的屬性和方法在類的內部能夠使用,外部不能使用可以被繼承
3)私有 - 私有的屬性和方法只能在類的內部使用,外部不能使用,也不能被繼承

2.Python中屬性和方法的訪問權限

1)python類中所有的屬性和方法本質都是公開的;私有化只是'提示'程序員,這個屬性或者方法在外部不要使用,也不要去繼承
2)怎么私有化(只能在內部用):在需要私有化的屬性名或者方法名前面加''(不能以''結尾)
3)私有化的原理:在私有的屬性和方法前加了‘_類名’就可以查詢私有化的屬性和方法。

屬性的getter和setter

1)getter -- 當我們需要在獲取屬性值之前做其他的事情,就需要給這個屬性添加getter。

2)setter -- 當需要給屬性賦值之前做點別的事情,就需要給這個屬性添加setter。

3)給屬性添加getter

a. 屬性命名的時候前面加'_'(一個下劃線)
b. 在@property裝飾器后面聲明一個對象方法:

將屬性去掉下劃線作為反方法名
方法除了self以外不需要其他參數(shù)
函數(shù)的返回值就是獲取這個屬性帶下劃線的值

4)給屬性添加setter

屬性添加setter之前必須先添加getter

a.保證添加屬性名前有一個下劃線‘_’
b.在@getter名.setter聲明對象方法
將屬性去掉下劃線作為方法名
需要一個self以外的參數(shù)
不需要返回值
c. 在外部使用屬性的時候,通過‘對象.不帶下劃線的屬性’去使用

注意:當給屬性賦值的時候,實質是在調用setter對應的方法

class WriteError(Exception):
    def __str__(self):
        return '不能修改只讀屬性'
class retangle:
    def __init__(self, width, height):
        if isinstance(height,int) or isinstance(float,int):
            self._height = height
        else:
            raise ValueError
        self._width = width
        self._height = height
        self._area = 0
        self._perimeter = 0
    @property
    def width(self):
        return self._width
    @width.setter
    def width(self,value):
        if not isinstance(value, int) or isinstance(value, float):
            raise ValueError
        if value < 0:
            raise ValueError
        self._width = value
    @property
    def height(self):
        return self.height
    @height.setter
    def height(self, value):
        if not isinstance(value, int) or isinstance(value, float):
            raise ValueError
        if value < 0:
            raise ValueError
        self._height = value
    @property
    def area(self):
        return self._width*self._height
    @area.setter
    def area(self):
        raise WriteError
    @property
    def perimeter(self):
        return (self._width+self._height)*2
p1 = retangle(2,4)
print(p1.area)
print(p1.perimeter)
p1.area = 20
print(p1.area)  #應該報錯不能修改只讀屬性

類中的方法分為:對象方法,類方法,靜態(tài)方法

1)對象方法

a.怎么聲明:直接聲明
b.怎么調用:用對象來調用
c.特點:有指向當前對象的self
d.什么時候用:如果實現(xiàn)函數(shù)的功能需要用到對象屬性,就使用對象方法

2)類方法(類能做的事情,cls都能做)

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

3)靜態(tài)方法

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

繼承

1.什么是繼承?

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

2.怎么繼承

1)語法

class 類名(父類1,父類2,,):
說明文檔
類的內容

2)說明:

() - 固定寫法。如果省略括號就默認繼承object(基類)
父類 - 一個類的父類可以有多個,但是一般情況下只有一個(支持多繼承)

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

相關閱讀更多精彩內容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,674評論 1 32
  • 內置函數(shù)屬性 1.聲明是內置類屬性 聲明類的時候系統(tǒng)自動添加的屬性(可能是字段也可能是對象屬性) 定制當前類的對象...
    舉顆鳳梨閱讀 296評論 0 4
  • 什么是類,什么是對象類就是擁有相同功能相同屬性的對象的集合 抽象的概念對象是類的實例 類的聲明class 類名:...
    小逗比的奮斗史閱讀 149評論 0 0
  • 一、內置類屬性 聲明類的時候系統(tǒng)自動添加的屬性:字段、對象屬性。 __dict__ -將對象轉換成字典 對象屬性...
    浩子_唯一號閱讀 270評論 0 1
  • 一、屬性: 本質上,python中所有的屬性和方法都是公開的,在類的外部可以使用也可以被繼承 1.私有化 讓屬性和...
    墨2019418閱讀 343評論 0 0

友情鏈接更多精彩內容