day13-類和對(duì)象

1 編程思想:

1.1 面向過程編程 - 工具:邏輯鸣戴、算法

遇到問題考慮直接用代碼栓霜;把邏輯思維轉(zhuǎn)換成代碼蜕青,解決問題苟蹈。

1.2 函數(shù)式編程 - 工具:函數(shù)

遇到問題糊渊,就考慮是否有一個(gè)這種功能的函數(shù)右核。

1.3 面向?qū)ο缶幊?- 工具:類和對(duì)象

遇到問題,就考慮是否有一個(gè)對(duì)象能夠幫我解決問題渺绒。

2 類的聲明

類:就是擁有相同屬性和相同功能的對(duì)象的集合(類是抽象的)贺喝。
對(duì)象:類的實(shí)例(對(duì)象是具體的)。

2.1 類的聲明

語法:
class 類名(父類列表):
類的內(nèi)容
說明:
class - 聲明類的關(guān)鍵字
類名 - 標(biāo)識(shí)符宗兼,不能是關(guān)鍵字躏鱼;
類名采用駝峰式命名,并且首字母大寫
見名知義
(父類列表)- 繼承語法殷绍;可以省略染苛,省略的時(shí)候相當(dāng)于(object)
類的內(nèi)容 - 主要包含屬性和方法。
駝峰式命名:名字由多個(gè)單詞組成的時(shí)候主到,通過單詞首字母大寫來區(qū)分不同的單詞茶行。studnetName;userName;userId。
方法:聲明在類中的函數(shù)就是方法登钥。

2.2 屬性和方法

類中的屬性 - 指的是在類中聲明的變量畔师;分為類的字段和對(duì)象屬性。
類中的方法 - 指的是在類中聲明的函數(shù)牧牢;分為對(duì)象方法看锉,類方法和靜態(tài)方法。

   class Person:  # 聲明了一個(gè)Person類
    """人類"""
    # 屬性
    num=61  # 字段
    # 方法
    def eat(self):
        print('吃飯')

2.3 創(chuàng)建對(duì)象

類名()-->創(chuàng)建類對(duì)應(yīng)的對(duì)象塔鳍。

3 對(duì)象方法

3.1 什么是對(duì)象方法

直接聲明在類中伯铣,并且自帶一個(gè)叫self的參數(shù)的函數(shù)。

3.2 對(duì)象方法的調(diào)用

對(duì)象方法的調(diào)用 - 通過對(duì)象調(diào)用對(duì)象方法
對(duì)象.對(duì)象方法()
通過對(duì)象調(diào)用對(duì)象方法的時(shí)候轮纫,對(duì)象方法中的第一個(gè)參數(shù)self不用傳參腔寡,系統(tǒng)會(huì)自動(dòng)將當(dāng)前對(duì)象傳給self,哪個(gè)對(duì)象調(diào)用的蜡感,self就指向誰蹬蚁。
注意:當(dāng)前類的對(duì)象能做的事情,self都能做郑兴。

# 聲明Person類
class Person:
    """人類"""
    # 聲明了一個(gè)對(duì)象方法sleep
    def sleep(self,a):
        # self=p1犀斋,a=10
        print('睡覺',a)
# 創(chuàng)建Perosn的對(duì)象p1
p1=Person()

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

4.1 魔法方法

python類中,用__開頭并且由__結(jié)尾的方法情连,就是魔法方法叽粹。魔法方法不需要主動(dòng)調(diào)用,都會(huì)自動(dòng)調(diào)用。

4.2__init__方法

1.是對(duì)象方法虫几;
2.不需要自己調(diào)用锤灿,會(huì)被自動(dòng)調(diào)用;
3.專門用來對(duì)對(duì)象進(jìn)行初始化的辆脸。

4.3 構(gòu)造方法

概念:函數(shù)名和類名一樣的函數(shù)但校,就是構(gòu)造方法。
1.當(dāng)我們創(chuàng)建類的時(shí)候啡氢,系統(tǒng)會(huì)自動(dòng)創(chuàng)建這個(gè)類的構(gòu)造方法状囱,用來創(chuàng)建對(duì)象。
2.當(dāng)我們通過構(gòu)造方法創(chuàng)建對(duì)象的時(shí)候倘是,系統(tǒng)會(huì)自動(dòng)調(diào)用init方法來對(duì)創(chuàng)建好的對(duì)象進(jìn)行初始化亭枷。
注意:當(dāng)init方法中,除了self以外如果需要?jiǎng)e的參數(shù)搀崭,那么這些參數(shù)是通過構(gòu)造方法來傳的參
只要調(diào)用了構(gòu)造方法就會(huì)產(chǎn)生新的對(duì)象叨粘,即使傳入的參數(shù)一樣(想要對(duì)象,調(diào)用構(gòu)造方法)瘤睹。

5 對(duì)象屬性

5.1.什么是對(duì)象屬性

1.聲明在init方法中
2.self.屬性名=值
3.通過對(duì)象使用:對(duì)象.屬性
語法:
self.變量名=值
說明:變量名就是屬性名升敲,這個(gè)變量就是對(duì)象屬性

5.2什么樣的屬性應(yīng)該聲明為對(duì)象屬性

如果屬性的值會(huì)因?yàn)閷?duì)象不同而不一樣,那這樣的屬性就應(yīng)該聲明成對(duì)象屬性默蚌。反之就聲明為類的字段冻晤。

5.2.1對(duì)象屬性創(chuàng)建使用默認(rèn)值

class Person:
    def __init__(self):
        # 這兒的name和age就是Person類的對(duì)象屬性
        self.name='李四'
        self.age=0
p1=Person() # 創(chuàng)建對(duì)象
p1.name='張三'  # 對(duì)對(duì)象的name屬性進(jìn)行修改

5.2.2創(chuàng)建對(duì)象的時(shí)候就決定對(duì)象屬性的值

class Person:
    # name1是參數(shù)名,self.name中的name是屬性名
    def __init__(self,name1,age=1):
        self.name=name1
        self.age=age
p11=Person('小紅')
p12=Person('小花')

練習(xí):聲明一個(gè)point類绸吸,擁有屬性x坐標(biāo)和y坐標(biāo)鼻弧。功能:求兩個(gè)點(diǎn)之間的距離

class Point:
    def __init__(self,x,y):
        self.x=x
        self.y=y
    def distance(self,other):
        return ((self.x-other.x)**2+(self.y-other.y)**2)**0.5

pp1=Point(2,3)
pp2=Point(5,7)  # pp1調(diào)用distance函數(shù),故self就是pp1對(duì)象锦茁,other是pp2對(duì)象
print(pp1.distance(pp2))# 5.0

6 對(duì)象屬性的增刪改查

注意:對(duì)象屬性的增刪改查攘轩,都是針對(duì)指定的那一個(gè)對(duì)象,不會(huì)影響其他對(duì)象码俩。

class Dog:
    def __init__(self,name,color,type):
        self.name=name
        self.color=color
        self.type=type

dog1=Dog('旺財(cái)','黃色','二哈')

6.1 查(獲取對(duì)象屬性的值)

1.對(duì)象.屬性 - 當(dāng)屬性不存在的時(shí)候會(huì)報(bào)錯(cuò)
2.getattr(對(duì)象度帮,屬性名,默認(rèn)值) - 當(dāng)屬性不存在的時(shí)候稿存,如果設(shè)置了默認(rèn)值笨篷,程序不崩潰,而是返回默認(rèn)值瓣履。

print(dog1.name) # 旺財(cái)
# print(dog1.sex) # AttributeError
print(getattr(dog1,'color')) # 黃色
print(getattr(dog1,'sex','才才')) # 才才

6.2增率翅、改

1對(duì)象.屬性 = 值
2.setattr(對(duì)象,屬性名袖迎,值)
注意:屬性存在的時(shí)候冕臭,對(duì)應(yīng)的功能是修改屬性的值腺晾。當(dāng)屬性不存在的時(shí)候是添加屬性。

dog1.name='大黃'          # 修改
print(dog1.name) # 大黃
dog1.sex='雄'             # 添加
print(dog1.sex) # 雄

setattr(dog1,'name','熱狗') # 修改
print(dog1.name) # 熱狗
setattr(dog1,'name2','肉狗') # # 添加
print(dog1.name2)  # 肉狗

6.3 刪除

  1. del 對(duì)象.屬性
    2.delattr(對(duì)象辜贵,屬性名)
del dog1.name # 刪除
print(dog1.name) # AttributeError

delattr(dog1,'color') # 刪除
print(dog1.color) # AttributeError

6.4 設(shè)置魔法 slots魔法

slots是用來約束當(dāng)前這個(gè)類有哪些屬性悯蝉。

class Student:
    # Student類的對(duì)象只能有name,study_id托慨,age和sex屬性
    __slots__ = ('name','study_id','age','sex')
    def __init__(self,name,age):
        self.name=name
        self.study_id='001'
        self.age=age

7 類的字段和內(nèi)置類屬性

7.1 類的字段

1.直接聲明在類里面鼻由,函數(shù)的外面的變量就是類的字段
2.類的字段需要通過類來使用 : 類.字段 - (不管是在類的里面還是類的外面都一樣通過類來使用)
(在類中聲明一個(gè)函數(shù)就是相當(dāng)于聲明一個(gè)字段)
3.不會(huì)因?yàn)閷?duì)象不同而不一樣的數(shù)據(jù)就聲明成類的字段。

class Person:
    # 聲明了一個(gè)字段number
    number=61

print(Person.number) # 61

7.2 內(nèi)置類屬性

內(nèi)置屬性就是聲明類的時(shí)候榴芳,類中已經(jīng)聲明好的屬性(包含類的字段和對(duì)象的屬性)嗡靡。

class Dog:
    """說明文檔:狗類"""
    # 類的字段
    type='犬科'
    # 對(duì)象屬性
    def __init__(self,name='狗',age=5,color='白'):
        self.name=name
        self.age=age
        self.color=color

    # 對(duì)象方法
    def eat(self,food):
        print('%s在吃%s'%(self.name,food))

    # 類方法
    @classmethod
    def shout(cls):
        print('wangwnag...')

    # 靜態(tài)方法
    @staticmethod
    def bite():
        print('狗咬人')

dog1=Dog('小黑',3,'黑色')

7.2.1 __name__

類.__name__ - 獲取類的名字(字符串)

class_name=Person.__name__
print( class_name,type( class_name)) # Person ,<class 'str'>

7.2.2__class__

對(duì)象.__class__ - 獲取對(duì)象對(duì)應(yīng)的類(結(jié)果是一個(gè)類,原來類能做的事情它都能可以做)

aa=dog1.__class__
d1=Dog()
d2=aa()
print(d1,d2)
print(Dog.type) # 犬科
print(aa.type) # 犬科
print(dog1.__class__.__name__)  # Dog

7.2.3 __dict__

類.__dict__ - 獲取當(dāng)前類的所有的類的字段及其對(duì)應(yīng)的值.
(重點(diǎn))對(duì)象.__dict__ - 將當(dāng)前對(duì)象所有的對(duì)象屬性及其值轉(zhuǎn)換成字典窟感,key是屬性名,value是屬性的值
如果給類的slots賦了值歉井,那么這個(gè)類的對(duì)象的dict屬性就不能用了

# 用類調(diào)用柿祈,獲取所有類的字段
print(Dog.__dict__) # {'__module__': '__main__', 'type': '犬科', '__init__':.....}

# 用對(duì)象調(diào)用,將對(duì)象的屬性及其值轉(zhuǎn)換成字典哩至,重點(diǎn)
print(dog1.__dict__) # {'name': '小黑', 'age': 3, 'color': '黑色'} # 數(shù)據(jù)本地化及傳輸時(shí)經(jīng)常用到

7.2.4 __base__

類.__base__ - 獲取當(dāng)前類的父類(以元祖的形式返回躏嚎,元祖中的元素就是類的父類)

print(Dog.__bases__) # (<class 'object'>,)

7.2.5 __module__

類.__module__ - 獲取當(dāng)前類所在的模塊的模塊名

print(Dog.__module__) # __main__ 當(dāng)就在目前正在執(zhí)行的模塊時(shí),返回main菩貌,否則返回文件名

7.3 __doc__

類.__doc__ -獲取類的說明文檔

print(Dog.__doc__) # 說明文檔:狗類
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末卢佣,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子箭阶,更是在濱河造成了極大的恐慌虚茶,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,406評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仇参,死亡現(xiàn)場(chǎng)離奇詭異嘹叫,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)诈乒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,395評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門罩扇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人怕磨,你說我怎么就攤上這事喂饥。” “怎么了肠鲫?”我有些...
    開封第一講書人閱讀 167,815評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵员帮,是天一觀的道長。 經(jīng)常有香客問我滩届,道長集侯,這世上最難降的妖魔是什么被啼? 我笑而不...
    開封第一講書人閱讀 59,537評(píng)論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮棠枉,結(jié)果婚禮上浓体,老公的妹妹穿的比我還像新娘。我一直安慰自己辈讶,他們只是感情好命浴,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,536評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贱除,像睡著了一般生闲。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上月幌,一...
    開封第一講書人閱讀 52,184評(píng)論 1 308
  • 那天碍讯,我揣著相機(jī)與錄音,去河邊找鬼扯躺。 笑死捉兴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的录语。 我是一名探鬼主播倍啥,決...
    沈念sama閱讀 40,776評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼澎埠!你這毒婦竟也來了虽缕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,668評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤蒲稳,失蹤者是張志新(化名)和其女友劉穎氮趋,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弟塞,經(jīng)...
    沈念sama閱讀 46,212評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡凭峡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,299評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了决记。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片摧冀。...
    茶點(diǎn)故事閱讀 40,438評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖系宫,靈堂內(nèi)的尸體忽然破棺而出索昂,到底是詐尸還是另有隱情,我是刑警寧澤扩借,帶...
    沈念sama閱讀 36,128評(píng)論 5 349
  • 正文 年R本政府宣布椒惨,位于F島的核電站,受9級(jí)特大地震影響潮罪,放射性物質(zhì)發(fā)生泄漏康谆。R本人自食惡果不足惜领斥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,807評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望沃暗。 院中可真熱鬧月洛,春花似錦、人聲如沸孽锥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,279評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽惜辑。三九已至唬涧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盛撑,已是汗流浹背碎节。 一陣腳步聲響...
    開封第一講書人閱讀 33,395評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留撵彻,地道東北人钓株。 一個(gè)月前我還...
    沈念sama閱讀 48,827評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像陌僵,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子创坞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,446評(píng)論 2 359

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

  • 13.1 編程思想 1.編程思想: 1.面向過程編程 - 邏輯碗短、算法遇到問題考慮直接把邏輯思維轉(zhuǎn)換成代碼,解決問題...
    2333_11f6閱讀 203評(píng)論 0 0
  • 一题涨、面向?qū)ο缶幊?編程思想:1.面向過程編程 ---> 算法偎谁,邏輯(數(shù)學(xué)邏輯) 2.函數(shù)式編程 ---> 函數(shù),...
    龍神海王閱讀 160評(píng)論 0 0
  • 晚上看奇葩說,那期的辯題是“剩男剩女席函,找對(duì)象铐望,該不該差不多”。 我并不是羅老師說的手藝人茂附,但是恰恰深有感觸正蛙。 辯論...
    LynnYe閱讀 897評(píng)論 0 0
  • 至未來 青春激昂拓新業(yè),波瀾壯闊繪藍(lán)圖营曼,創(chuàng)新教育展新支乒验,贏在天漢福桑梓。 參加2014年共青團(tuán)漢中市委的創(chuàng)業(yè)大賽作...
    iTechElao閱讀 308評(píng)論 0 2
  • 歷史再重復(fù)蒂阱,我們只是填充物
    心處何方閱讀 114評(píng)論 2 1