【python】面對(duì)對(duì)象入門(mén)篇

      網(wǎng)友投稿 919 2025-04-02

      一.引言

      類(lèi)把數(shù)據(jù)與功能綁定在一起。創(chuàng)建新類(lèi)就是創(chuàng)建新的對(duì)象?類(lèi)型,從而創(chuàng)建該類(lèi)型的新?實(shí)例?。類(lèi)實(shí)例具有多種保持自身狀態(tài)的屬性。類(lèi)實(shí)例還支持(由類(lèi)定義的)修改自身狀態(tài)的方法。

      和其他編程語(yǔ)言相比,Python 只用了很少的新語(yǔ)法和語(yǔ)義就加入了類(lèi)。Python 的類(lèi)是 C++ 和 Modula-3 中類(lèi)機(jī)制的結(jié)合體,而且支持所有面向?qū)ο缶幊蹋∣OP)的標(biāo)準(zhǔn)特性:

      類(lèi)繼承機(jī)制支持多個(gè)基類(lèi),

      派生類(lèi)可以覆蓋基類(lèi)的任何方法,

      【python】面對(duì)對(duì)象入門(mén)篇

      類(lèi)的方法可以調(diào)用基類(lèi)中相同名稱(chēng)的方法。

      對(duì)象可以包含任意數(shù)量和類(lèi)型的數(shù)據(jù)。和模塊一樣,

      類(lèi)也擁有 Python 天然的動(dòng)態(tài)特性:在運(yùn)行時(shí)創(chuàng)建,創(chuàng)建后也可以修改。

      二.python面對(duì)對(duì)象術(shù)語(yǔ)

      python面向?qū)ο蟮闹匾g(shù)語(yǔ):

      多態(tài)(polymorphism):一個(gè)函數(shù)有多種表現(xiàn)形式,調(diào)用一個(gè)方法有多種形式,但是表現(xiàn)出的方法是不一樣的。

      繼承(inheritance)子項(xiàng)繼承父項(xiàng)的某些功能,在程序中表現(xiàn)某種聯(lián)系

      封裝(encapsulation)把需要重用的函數(shù)或者功能封裝,方便其他程序直接調(diào)用

      類(lèi):對(duì)具有相同數(shù)據(jù)或者方法的一組對(duì)象的集合

      對(duì)象:對(duì)象是一個(gè)類(lèi)的具體事例

      實(shí)例化:是一個(gè)對(duì)象事例話(huà)的實(shí)現(xiàn)

      標(biāo)識(shí):每個(gè)對(duì)象的事例都需要一個(gè)可以唯一標(biāo)識(shí)這個(gè)事例的標(biāo)記

      實(shí)例屬性:一個(gè)對(duì)象就是一組屬性的集合

      實(shí)例方法:所有存取或者更新對(duì)象某個(gè)實(shí)例一條或者多條屬性函數(shù)的集合。

      類(lèi)屬性:屬于一個(gè)類(lèi)中所有對(duì)象的屬性,

      類(lèi)方法:那些無(wú)須特定的對(duì)性實(shí)例就能夠工作的從屬于類(lèi)的函數(shù)。

      python內(nèi)置類(lèi)的屬性

      __dict__ : 類(lèi)的屬性(包含一個(gè)字典,由類(lèi)的數(shù)據(jù)屬性組成)

      __doc__ :類(lèi)的文檔字符串

      __name__: 類(lèi)名

      __module__: 類(lèi)定義所在的模塊(類(lèi)的全名是'__main__.className',如果類(lèi)位于一個(gè)導(dǎo)入模塊mymod中,那么className.__module__ 等于 mymod)

      __bases__ : 類(lèi)的所有父類(lèi)構(gòu)成元素(包含了一個(gè)由所有父類(lèi)組成的元組)

      class Animal: # 定義一個(gè)空類(lèi) pass Animal.__dict__ Animal.__doc__ Animal.__name__ Animal.__module__ Animal.__bases__ # {'__module__': '__main__', '__dict__': , '__weakref__': , '__doc__': None} # None # Animal # __main__ # (,)

      三.初識(shí)類(lèi)

      類(lèi)是一種面對(duì)對(duì)象編程:1 一切皆對(duì)象 ,? ? 2 對(duì)象是數(shù)據(jù)和操作的封裝,? ? 3 對(duì)象是獨(dú)立的 但是對(duì)象之間可以相互作用,? ? 4 目前oop是最接近人類(lèi)認(rèn)知的編程方式類(lèi)對(duì)象:?類(lèi)也是對(duì)象,類(lèi)的定義執(zhí)行后會(huì)生成一個(gè)類(lèi)對(duì)象

      類(lèi)屬性:對(duì)對(duì)象狀態(tài)的抽象,用數(shù)據(jù)結(jié)構(gòu)來(lái)描述,類(lèi)定義中的變量和類(lèi)定義的方法都是類(lèi)的屬性

      類(lèi)變量:屬性也是標(biāo)識(shí)符,也是變量

      類(lèi)方法:對(duì)對(duì)象行為的抽象,用操作名和實(shí)現(xiàn)該操作的方法來(lái)描述

      # 類(lèi)定義: class Person: pass print(Person.__doc__,Person.__name__) # None Person t1 = Person() # t1是類(lèi)Person實(shí)例化得到的實(shí)例,自動(dòng)調(diào)用__init__初始化,第一個(gè)參數(shù)是self print(type(t1), t1) # <__main__.Person object at 0x1012f6e80> print(isinstance(t1, Person)) # True

      我們定義一個(gè)有屬性和方法的類(lèi)

      class Person: def __init__(self, name, age=18): self.name = name self.age = age def showme(self): # 將類(lèi)方法綁定在當(dāng)前實(shí)例上,自動(dòng)將綁定的實(shí)例注入給第一形參self print('{} is {} years old'.format(self.name, self.age)) # showme是方法method,本質(zhì)上就是普通的函數(shù)對(duì)象function,它一般要求至少有一個(gè)參數(shù)。第一個(gè)形式參數(shù)可以叫self(約定俗成) tom = Person('Tom') print(Person.showme) print(tom.showme) # 描述器 # >

      self指代當(dāng)前實(shí)例本身,當(dāng)我們初始化實(shí)例調(diào)用類(lèi)方法時(shí),將類(lèi)方法綁定在當(dāng)前實(shí)例上,自動(dòng)將綁定的實(shí)例注入給第一形參self

      不過(guò),要注意,實(shí)例變量是每個(gè)實(shí)例自己的變量,是自己獨(dú)有的,類(lèi)變量是類(lèi)的變量,是類(lèi)的所有實(shí)例共享的屬性和方法

      class Person: age = 3 height = 170 def __init__(self, name, age=18): self.name = name self.age = age tom = Person('Tom') jerry = Person('Jerry', 20) Person.age = 30 print(type(Person),Person.__class__,) print(Person.age,tom.age,jerry.age) # # 30 18 20

      類(lèi)的函數(shù)幾種定義方法,注意類(lèi)中禁止定義普通函數(shù),調(diào)用時(shí)會(huì)報(bào)TypeError

      class A: def showme(): print("我是一個(gè)普通函數(shù)") def showme2(self): print("我是一個(gè)一般方法 me={}".format(self), type(self), self.__dict__) @classmethod def showme3(self): print("我是一個(gè)類(lèi)方法 me={}".format(self), type(self), self.__name__) @classmethod def showme4(cls): print("我是一個(gè)類(lèi)方法 me={}".format(cls), type(cls), cls.__name__) @classmethod def showme5(): print("我是一個(gè)靜態(tài)方法") @staticmethod def showme6(): print("我是一個(gè)靜態(tài)方法") A.showme() # 我是一個(gè)普通函數(shù) a=A() # 一般方法調(diào)用的兩種方式 a.showme2() A.showme2(a) # 我是一個(gè)一般方法 me=<__main__.A object at 0x000001222F117E20> {} # 我是一個(gè)一般方法 me=<__main__.A object at 0x000001222F117E20> {} # 類(lèi)方法調(diào)用 A.showme3() a.showme3() # 我是一個(gè)類(lèi)方法 me= A # 我是一個(gè)類(lèi)方法 me= A A.showme4() a.showme4() # 我是一個(gè)類(lèi)方法 me= A # 我是一個(gè)類(lèi)方法 me= A # A.showme5() # a.showme5() # TypeError: showme() takes 0 positional arguments but 1 was given A.showme6() a.showme6() # 我是一個(gè)靜態(tài)方法 # 我是一個(gè)靜態(tài)方法

      總結(jié)

      類(lèi)變量用全大寫(xiě)命名,類(lèi)用駝峰命名法命名

      類(lèi)變量屬于共享變量,所有實(shí)例都可以訪(fǎng)問(wèn)

      對(duì)象可以動(dòng)態(tài)的給自己加一個(gè)屬性(動(dòng)態(tài)語(yǔ)言的特性)

      實(shí)例.__dict__[變量名] 和 實(shí)例.變量名 ?都可以訪(fǎng)問(wèn)實(shí)例屬性(前者不會(huì)訪(fǎng)問(wèn)類(lèi)字典)

      實(shí)例變量會(huì)隱藏同名的類(lèi)變量,實(shí)例無(wú)法直接訪(fǎng)問(wèn)

      實(shí)例屬性的查找順序:先找自己的 __dict__ ,如果沒(méi)有,通過(guò)屬性 __class__找自己的類(lèi),再去類(lèi)的 __dict__ 查找

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶(hù)投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:幫助行業(yè)用好云,華為云以“一切皆服務(wù)”讓客戶(hù)上云不再困難
      下一篇:WPS表格怎么計(jì)算多個(gè)數(shù)的乘積
      相關(guān)文章
      久久99亚洲网美利坚合众国| xvideos亚洲永久网址| 亚洲人成国产精品无码| 亚洲sss综合天堂久久久| 亚洲色图国产精品| 亚洲AV日韩AV高潮无码专区| 亚洲成av人片在线观看无码不卡| 亚洲日韩一页精品发布| 亚洲色婷婷六月亚洲婷婷6月| 激情综合色五月丁香六月亚洲| 久久亚洲AV永久无码精品| 中文字幕久久亚洲一区| 在线观看国产区亚洲一区成人| 国产福利电影一区二区三区,亚洲国模精品一区| 亚洲中文无码av永久| 亚洲va成无码人在线观看| www.亚洲成在线| 亚洲熟女精品中文字幕| 亚洲熟女精品中文字幕| 亚洲第一成年免费网站| 国产成人亚洲综合a∨| 亚洲国产电影av在线网址| 亚洲日韩在线观看| 亚洲精品自在在线观看| 亚洲av网址在线观看| 亚洲欧洲日韩在线电影| 亚洲youjizz| 国产精品亚洲专区无码唯爱网| 亚洲国产a级视频| 亚洲综合色自拍一区| 久久久无码精品亚洲日韩蜜桃| 久久av无码专区亚洲av桃花岛| 亚洲国产亚洲综合在线尤物| 午夜在线a亚洲v天堂网2019| 亚洲AV女人18毛片水真多| 亚洲真人日本在线| 亚洲AV无码成人精品区蜜桃| 亚洲精品美女久久久久9999| 国产精品亚洲精品| 久久亚洲精品成人无码| 久久伊人亚洲AV无码网站|