python面向?qū)ο?

內(nèi)置類屬性

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

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

class Person:
    num = 61

    # 注意:如果設(shè)置了__slots__的值末融,那么當(dāng)前類的對象就不能使用__dict__屬性
    def __init__(self, name, sex, age):
        self.name = name
        self.sex = sex
        self.age = age

    def eat(self, food):
        print()

    # 定制當(dāng)前類的對象
    # 1)重寫__str__方法,這個方法的返回值就是對應(yīng)的打印結(jié)果(類型必須是字符串)
    # def __str__(self):
    #     return '<' + str(self.__dict__)[1:-1] + '>'

    # 重寫__repr__方法坐慰,這個方法的返回值就是對應(yīng)的打印結(jié)果(類型必須是字符串
    def __repr__(self):
        return '<' + str(self.__dict__)[1:-1] + '>'

person1 = Person('小米', '男', 18)
# 1.__name__
"""
類的字段:類名.__name__    -   獲取類的名字
"""
print('==============')
print(type(Person.__name__))

# 2.__doc___
"""
類的字段;類.__doc___     -   獲取聲明文檔
"""

# 3.__class__
"""
對象屬性:對象.__class__   -   獲取對象對應(yīng)的類(和type功能一樣)

"""
print('================')
p1 = person1.__class__('小米', '男', 17)
print(p1.age)
print(type(person1))

# 4.__dict__(將對象轉(zhuǎn)換成字典)
"""
對象屬性:對象.__dict__    -   將對象中所有的屬性和值轉(zhuǎn)換成對應(yīng)的一個字典中的鍵值對(一個對象對應(yīng)一個字典)
類的字段:類.__dict__     -   將類轉(zhuǎn)換成一個字典叛复,字典值的元素是類中所有的字段和對應(yīng)的值
"""
print(person1.__dict__)
print(Person.__dict__)
person = [person1]
print(person)

# 5.__module__
"""
類的字段:類.__module__   -   獲取聲明當(dāng)前類是在哪個模塊中聲明的(返回的是模塊的名字)
"""

# 6.__bases__
"""
類的字段:類.__bases__    -   獲取當(dāng)前類的父類(返回的是一個元組)
"""

私有化

  • 1.訪問權(quán)限:公有疆偿、保護(hù)芝薇、私有
    ????公有 - 公有的屬性和方法在類的內(nèi)部劫拢、外部能夠使用肉津,也能被繼承
    ????保護(hù) - 保護(hù)的屬性和方法只能在類的內(nèi)部使用,可以被繼承
    ????私有 - 私有的屬性和方法只能在類的內(nèi)部使用舱沧,不能被繼承
  • 2.python中的屬性和方法的訪問權(quán)限
    ????python類中所有的屬性和方法本質(zhì)都是公開的妹沙;私有化是假的,只是提示程序員這個屬性和方法在外部不要使用熟吏,也不要去繼承
    ????怎么私有化:在需要私有化的屬性名和方法前加'__'(注意不能以'__'結(jié)尾)
    python私有化的原理:在私有的屬性和方法前加了'_類名'

屬性的getter和setter

  • 1.什么是getter和setter
    ??當(dāng)我們需要在獲取屬性值之前做點(diǎn)別的事情初烘,就需要給這個屬性添加getter
    ??當(dāng)我們需要給屬性賦值之前做點(diǎn)別的事情,就需要給這個屬性添加getter
  • 2.給屬性添加getter
    ??1)屬性命名的時候前面加'_'
    ??2)在@property裝飾器后面聲明一個對象方法
    ????a.將屬性去掉下劃線作為方法名
    ????b.方法除了self以外不需要其他參數(shù)
    ????c.函數(shù)的返回值就是獲取這個屬性的時候得到的值
    ??3)在外部使用屬性的時候,通過'對象.不帶下劃線'去使用
    ??注意:獲取屬性值的時候分俯,就會自動去調(diào)用getter函數(shù)

3.給屬性添加setter
??屬性添加setter之前必須先添加getter
??1)保證屬性名前'_'
??2)在@getter名.setter后面聲明對象方法
????a.將屬性去掉下劃線作為方法名
????b.需要一個self以外的參數(shù)
????c.不需要返回值
??3)在外部使用屬性的時候,通過'對象.不帶下劃線'去使用
??注意:當(dāng)給屬性賦值的時候哆料,實(shí)質(zhì)是調(diào)用setter對應(yīng)的方法

# 練習(xí):寫一個矩形類缸剪,有長,寬东亦,面積杏节,周長
class Rectangle:
    def __init__(self, length, weight):
        self._length = length
        self._weight = weight
        self._area = None
        self._perimeter = None

    @property
    def length(self):
        return self._length

    @length.setter
    def length(self, value):
        if (isinstance(value, int) or isinstance(value, float)) and value > 0:
            self._length = value
        else:
            raise ValueError

    @property
    def weight(self):
        return self._weight

    @weight.setter
    def weight(self, value):
        if (isinstance(value, int) or isinstance(value, float)) and value > 0:
            self._weight = value
        else:
            raise ValueError

    @property
    def area(self):
        self._area = self._weight * self._length
        return self._area

    @area.setter
    def area(self, value):
        raise ValueError

    @property
    def perimeter(self):
        self._perimeter = (self._weight + self._length) * 2
        return self._perimeter

    @perimeter.setter
    def perimeter(self, value):
        raise ValueError

r1 = Rectangle(100, 200)
print(r1.area)
print(r1.perimeter)
r1.length = 20
r1.weight = 30
print(r1.area)
print(r1.perimeter)

方法

  • 1.對象方法
    ??1)怎么聲明:直接聲明
    ??2)怎么調(diào)用:用對象來調(diào)用
    ??3)特點(diǎn):有指向當(dāng)前對象的self
    ??4)什么時候用:如果實(shí)現(xiàn)函數(shù)的功能需要用到對象屬性,就是用對象方法

  • 2.類方法
    ??1)怎么聲明:聲明在@classmethod
    ??2)怎么調(diào)用:用類來調(diào)用
    ??3)特點(diǎn):有自帶的參數(shù)cls典阵,表示當(dāng)前類奋渔;這個參數(shù)在調(diào)用的時候不傳參,系統(tǒng)會將當(dāng)前類傳給它
    ??????cls:誰調(diào)用就指向誰(如果是對象壮啊,指向的是對象對應(yīng)的類)
    ??4)什么時候用:如果實(shí)現(xiàn)函數(shù)的功能不需要對象屬性嫉鲸,但需要類的字段,就是用類方法

  • 3.靜態(tài)方法
    ??1)怎么聲明:聲明在staticmethod后面
    ??2)怎么調(diào)用:通過類來調(diào)用歹啼,'類.靜態(tài)方法()'
    ??3)特點(diǎn):沒有默認(rèn)參數(shù)
    ??4)什么時候用:實(shí)現(xiàn)函數(shù)的功能既不需要類也不需要對象玄渗,就是使用靜態(tài)方法

繼承

  • 1.什么是繼承
    ??繼承就是讓子類直接擁有父類的屬性和方法
    ??子類 - 繼承者
    ??父類/超類 - 被繼承者
  • 2.怎么繼承
    1)語法
    ??class 類名(父類1座菠,父類2....):
    ????說明文檔
    ????類的內(nèi)容
    2)說明
    ??() - 固定寫法,如果省略相當(dāng)于(object)聲明類的時候如果沒有寫父類藤树,默認(rèn)繼承object(object又叫基類)
    ??父類 - 一個類的父類可以有多個浴滴,但是一般情況下只有一個(支持多繼承)
    ??注意:在子類中可以加super()去調(diào)用父類的方法(只能在對象方法和類方法中使用)在子類中添加對象屬性,需要通過super()去調(diào)用父類的init方法
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末岁钓,一起剝皮案震驚了整個濱河市升略,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屡限,老刑警劉巖品嚣,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異囚霸,居然都是意外死亡腰根,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門拓型,熙熙樓的掌柜王于貴愁眉苦臉地迎上來额嘿,“玉大人,你說我怎么就攤上這事劣挫〔嵫” “怎么了?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵压固,是天一觀的道長球拦。 經(jīng)常有香客問我,道長帐我,這世上最難降的妖魔是什么坎炼? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮拦键,結(jié)果婚禮上谣光,老公的妹妹穿的比我還像新娘。我一直安慰自己芬为,他們只是感情好萄金,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著媚朦,像睡著了一般氧敢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上询张,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天孙乖,我揣著相機(jī)與錄音,去河邊找鬼。 笑死的圆,一個胖子當(dāng)著我的面吹牛鼓拧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播越妈,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼季俩,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了梅掠?” 一聲冷哼從身側(cè)響起酌住,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎阎抒,沒想到半個月后酪我,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡且叁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年都哭,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逞带。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡欺矫,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出展氓,到底是詐尸還是另有隱情穆趴,我是刑警寧澤,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布遇汞,位于F島的核電站未妹,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏空入。R本人自食惡果不足惜络它,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望歪赢。 院中可真熱鬧酪耕,春花似錦、人聲如沸轨淌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽递鹉。三九已至,卻和暖如春藏斩,著一層夾襖步出監(jiān)牢的瞬間躏结,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工狰域, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留媳拴,地道東北人黄橘。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像屈溉,于是被迫代替她去往敵國和親塞关。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

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

  • 內(nèi)置類屬性 內(nèi)置類屬性:python中每個類都擁有內(nèi)置的類屬性_name__doc__dict__module__...
    慢節(jié)拍_2709閱讀 293評論 0 4
  • 面向?qū)ο缶幊? 1 內(nèi)置的類屬性 內(nèi)置類屬性:python中每個類都擁有內(nèi)置的類屬性 舉例說明: 2屬性私有化 p...
    Fizz翊閱讀 210評論 0 2
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對...
    cosWriter閱讀 11,093評論 1 32
  • 少時輕狂還妄稱雄 京都繁華欲問天公 直言不畏暗流洶涌 終赤袍加身獲爵功 ——多年未歸故鄉(xiāng)任舊 物是人非卻一場空 遲...
    離陌_6639閱讀 3,201評論 13 77
  • 一剪梅.思念 兜兜轉(zhuǎn)轉(zhuǎn)一灣碧子巾,寂靜無波帆赢,清泠冷冽。 蒼蒼莽莽衰草黃线梗,一眼無邊椰于,漫接天際。 迷迷蒙蒙薄霧稀仪搔,白樺無聲...
    胡詩宏閱讀 253評論 0 1