類和對(duì)象2018-10-17

類和對(duì)象

一般編程思想
1.面向過(guò)程編程-->算法,邏輯
2.函數(shù)式編程-->函數(shù)
3.面向?qū)ο缶幊?->類和對(duì)象

類的聲明

1.什么是類
類是擁有相同屬性和相同功能的對(duì)象的集合(抽象的)
對(duì)象就是類的實(shí)例(具體的)
2.類的聲明
格式: class 類名(父類列表):
類的說(shuō)明文檔
類的內(nèi)容
說(shuō)明:
class-->python中聲明類的關(guān)鍵字
類名-->標(biāo)識(shí)符,不能是關(guān)鍵字;類名使用駝峰式命名,并且首字母大寫;見(jiàn)名知義
(父類列表)-->繼承語(yǔ)法,讓聲明的類繼承括號(hào)中的父類。這個(gè)結(jié)構(gòu)可以省略,讓當(dāng)前類繼承python的基類:object
:-->固定結(jié)構(gòu)
類的說(shuō)明文檔-->注釋,對(duì)類進(jìn)行說(shuō)明。格式是三個(gè)雙引號(hào)
類的內(nèi)容-->包含屬性(存數(shù)據(jù)的變量)和方法(聲明在類中的函數(shù))

駝峰式命名:如果一個(gè)名字由多個(gè)單詞組成,第一個(gè)單詞首字母小寫。userName
PEP8命名規(guī)范:如果一個(gè)名字由多個(gè)單詞組成,所有字母小寫,多個(gè)單詞之間用下劃線隔開。變量和函數(shù)采用PEP8命名.user_name

3.對(duì)象的聲明
語(yǔ)法: 對(duì)象名=類名()
說(shuō)明:
對(duì)象名-->變量名
類名-->需已聲明過(guò)的類
如p1=Person()

對(duì)象方法

1.類的內(nèi)容包含屬性和方法,方法分為對(duì)象方法、類方法和靜態(tài)方法
2.對(duì)象方法:直接聲明在類中的函數(shù)。對(duì)象方法都有一個(gè)默認(rèn)參數(shù)self,通過(guò)對(duì)象來(lái)調(diào)用
3.對(duì)象方法的調(diào)用:對(duì)象.方法名()
調(diào)用對(duì)象方法時(shí),不需要給默認(rèn)參數(shù)self傳參,系統(tǒng)會(huì)自動(dòng)將當(dāng)前對(duì)象傳遞給self(傳參)
4.self:誰(shuí)調(diào)用當(dāng)前的對(duì)象方法,self就指向誰(shuí)。self就是當(dāng)前類的對(duì)象,類的對(duì)象能做的,self都能做

構(gòu)造方法和init方法

1.構(gòu)造方法
構(gòu)造方法就是函數(shù)名和類名一樣的方法,作用是用來(lái)創(chuàng)建對(duì)象的。聲明類的時(shí)候,系統(tǒng)會(huì)自動(dòng)為這個(gè)類創(chuàng)建對(duì)應(yīng)的構(gòu)造方法
創(chuàng)建對(duì)象的過(guò)程:調(diào)用構(gòu)造方法在內(nèi)存中開辟空間創(chuàng)建對(duì)象,并且會(huì)自動(dòng)調(diào)用__init__方法去對(duì)這個(gè)對(duì)象進(jìn)行初始化。最后將創(chuàng)建好的對(duì)象地址返回

2.__init__方法
對(duì)象方法
不需要手動(dòng)調(diào)用,創(chuàng)建完對(duì)象后,會(huì)被自動(dòng)調(diào)用

3.帶參,其他參數(shù)的init方法
__init__方法的參數(shù)要通過(guò)構(gòu)造方法來(lái)傳。(構(gòu)造方法的實(shí)參,會(huì)傳遞給init方法的形參)

對(duì)象的屬性

類的內(nèi)容包含屬性和方法,屬性又分為對(duì)象屬性和類的字段
屬性:用來(lái)在類中區(qū)保存數(shù)據(jù)的變量。
對(duì)象屬性:屬性的值會(huì)因?yàn)閷?duì)象不同而不同,這種屬性就需要聲明成對(duì)象屬性,例如人的名字年齡等。通過(guò)對(duì)象來(lái)使用
1.對(duì)象屬性的聲明
a.必須聲明在__init__方法中
b.聲明格式:self.屬性=初值
2.使用對(duì)象屬性
格式:對(duì)象.屬性

#創(chuàng)建不同對(duì)象的時(shí)候可以確定不同屬性值
class Person2:
    def __init__(self,name1,age1,sex1):
        self.name=name1
        self.age=age1
        self.sex=sex1
p1=Person2('ann',23,'female')
print(p1.name)

ann

3.對(duì)象屬性的增刪改查
a.查(獲取對(duì)象屬性的值)
需先創(chuàng)建對(duì)象后再查
方法1:對(duì)象.屬性-->獲取指定屬性值,屬性不存在會(huì)報(bào)錯(cuò)
方法2:getattr(對(duì)象,屬性名,默認(rèn)值)-->獲取指定屬性值,當(dāng)屬性不存在時(shí),如果設(shè)置了默認(rèn)值,不會(huì)報(bào)錯(cuò)并將默認(rèn)值作為結(jié)果。(如果沒(méi)有設(shè)置默認(rèn)值,屬性不存在則會(huì)報(bào)錯(cuò))
方法3:對(duì)象.__getattribute__(屬性名)-->獲取指定屬性值

class Student:
    def __init__(self,name='',age=0,study_id='001'):
        self.name=name
        self.age=age
        self.study_id=study_id
stu1=Student('anny')
print(stu1.name)
print(getattr(stu1,'name2','king'))
print(stu1.__getattribute__('age'))

anny
king
0

b.增/改(給對(duì)象添加屬性)
注意:只能針對(duì)某個(gè)特定對(duì)象增加/更改屬性,不影響其他對(duì)象。
方法1:對(duì)象.屬性=值
屬性不存在時(shí)可給對(duì)象添加屬性,屬性存在時(shí)就是修改
方法2:setattr(對(duì)象,屬性名,屬性值)
方法3:對(duì)象.__setattr__(屬性名,屬性值)
c.刪除(刪除對(duì)象屬性)
注意:只能針對(duì)某個(gè)特定對(duì)象刪除屬性,不影響其他對(duì)象。
方法1:del 對(duì)象.屬性
方法2:delattr(對(duì)象,屬性名)
方法3:對(duì)象..__delattr__(屬性名)

4.對(duì)象的使用
python中所有的數(shù)據(jù)都是對(duì)象,所有的變量存儲(chǔ)的都是對(duì)象的地址。

a.將對(duì)象給別的變量賦值
賦值:產(chǎn)生新的對(duì)象,將新的地址賦值時(shí),最好import copy模塊后,使用淺拷貝copy.copy(拷貝對(duì)象)

b.將對(duì)象作為列表的元素

定制當(dāng)前類對(duì)象的打印格式
def __str__(self):
return str(self.__dict__)

slots魔法

屬性:對(duì)象屬性,類的字段
類的字段:聲明在類里面,函數(shù)外面的變量就是類的字段。使用的時(shí)候通過(guò)類來(lái)使用:類.字段
格式
__slots__:用來(lái)約束當(dāng)前類的對(duì)象屬性有哪些

內(nèi)置類屬性

1.__name__ -->獲取當(dāng)前類的名字(字符串)
2.__doc__ -->獲取類的說(shuō)明文檔
3.__class__ -->通過(guò)對(duì)象.__class__獲取對(duì)象的類
4.類.__dict__ -->獲取當(dāng)前類所有類的字段和其對(duì)應(yīng)的值,以字典形式返回
對(duì)象.__dict__-->獲取當(dāng)前對(duì)象所有的屬性和其對(duì)應(yīng)的值,以字典的形式返回

class Dog:
    """狗類"""
    #num此處為類的字段
    num=10
    __slots__ = ('color','name','type')

    def __init__(self,color,name,type):
        self.color=color
        self.name=name
        self.type=type
    def run(self):
        print('%s is sleeping'%self.name)

dog1=Dog('白色','小靜','哈巴狗')
print(Dog.__name__,type(Dog.__name__))
print(Dog.__doc__)
print(Dog.__dict__)

Dog <class 'str'>
狗類
{'module': 'main', 'doc': '狗類', 'num': 100, 'slots': ('color', 'name', 'type'), 'init': <function Dog.init at 0x000001DD58FB0A60>, 'run': <function Dog.run at 0x000001DD58FB0D90>, 'color': <member 'color' of 'Dog' objects>, 'name': <member 'name' of 'Dog' objects>, 'type': <member 'type' of 'Dog' objects>}

5.類.__module__ -->獲取當(dāng)前類所在的模塊
6.類.__bases__ -->獲取當(dāng)前類的父類,返回的是一個(gè)元祖,元祖的元素是類

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,208評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評(píng)論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,477評(píng)論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,960評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評(píng)論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,200評(píng)論 0 288
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,726評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,617評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,807評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評(píng)論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,049評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評(píng)論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評(píng)論 1 281
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,432評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,769評(píng)論 2 372

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