日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python 面向对象编程

發(fā)布時(shí)間:2023/12/20 python 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 面向对象编程 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

  python是一門解釋語音,但是它是面向?qū)ο蟮?#xff0c;可以進(jìn)行對象編程。在進(jìn)行python面向?qū)ο缶幊讨?#xff0c;先來了解幾個(gè)術(shù)語:類、類對象、實(shí)例對象、屬性、函數(shù)和方法。

一、如何定義一個(gè)類?

class people(object): #新式類 blockclass people: #經(jīng)典類block

  類后面有個(gè)冒號,在block塊里面可以定義屬性和方法。當(dāng)一個(gè)類定義完就產(chǎn)生了一個(gè)類對象。類對象支持兩種操作:實(shí)例化和引用。引用操作就是通過類對象去調(diào)用類中的函數(shù)和方法,而實(shí)例化則是產(chǎn)生一個(gè)類對象的實(shí)例,稱作實(shí)例對象:

class human(object): #定義一個(gè)新式類human sex = 'male'     #定義一個(gè)屬性def func(self): #定義一個(gè)方法print(self.sex)

  human類定義完成后就產(chǎn)生了一個(gè)全局的類對象,可以通過類對象訪問類中的屬性和方法。當(dāng)通過human.sex來訪問時(shí),human.sex中的human就稱為類對象。也可以進(jìn)行實(shí)例化操作,h=human(),這樣就產(chǎn)生了一個(gè)human的實(shí)例對象,此時(shí)也可以通過對象H來訪問屬性和方法h.sex

?

  了解了類、類對象和實(shí)例對象的區(qū)別后,我們繼續(xù)了解python中的函數(shù)、方法和屬性的區(qū)別。

  在上面的代碼中注釋中,我們知道sex是一個(gè)屬性,func()是一個(gè)方法,與某個(gè)對象進(jìn)行綁定的函數(shù)叫做方法。在類中定義的函數(shù)與類對象或者實(shí)例對象綁定了,所以稱作方法。而類外定義的函數(shù)一般沒有進(jìn)行綁定,就稱作函數(shù)。

二、屬性

  在類中,我們可以定義一些屬性,比如:

class animal(object):name = 'dog'age = 2a = animal()print(a.name,a.age)

  定義一個(gè)animal類,里面定義了name和age屬性。在定義類之后,就可以來產(chǎn)生實(shí)例化對象,a = animal()就產(chǎn)生了一個(gè)實(shí)例化對象a,這里name和age都是公有屬性,可以在類外直接通過對象名訪問,如果想定義成私有的,就在屬性前面加上兩個(gè)下劃線'__'

class animal(object):__name = 'dog'__age = 2a = animal()print(a.__name,a.__age)

  這段程序會(huì)報(bào)錯(cuò)

Traceback (most recent call last):File "C:/Users/PycharmProjects/untitled1/file.py", line 8, in <module>print(a.__name, a.__age) AttributeError: 'animal' object has no attribute '__name'

  提示找不到該屬性,因?yàn)樗接袑傩允遣荒軌蛟陬愅馔ㄟ^對象名進(jìn)行訪問的,在python里面沒有public和private關(guān)鍵字來區(qū)別公有屬性和私有屬性,它是以屬性命名方式來區(qū)分的,如果在屬性名前面加2個(gè)下劃線'__',則表明該屬性為私有屬性,否則為公有屬性(方法同屬性一樣,也是前面加2個(gè)下劃線'__')

三、方法

  在類中可以根據(jù)需要定義一些方法,定義方法采用def關(guān)鍵字,在類中定義的方法至少會(huì)有一個(gè)參數(shù),一般以名為'self'的變量作為該參數(shù),而且作為第一個(gè)參數(shù)。下面來看個(gè)例子:

class human(object):__name = 'Jack'__age = 24def getname(self):return self.__namedef getage(self):return self.__agem = human()print(m.getname())print(m.getage())

?四、類中內(nèi)置的方法

 在Python中有一些內(nèi)置的方法,這些方法命名都有比較特殊的地方(其方法名以2個(gè)下劃線開始然后以2個(gè)下劃線結(jié)束)。類中最常用的就是構(gòu)造方法和析構(gòu)方法。

  構(gòu)造方法__init__(self,....)在生成對象時(shí)調(diào)用,可以用來進(jìn)行一些初始化操作,不需要顯示去調(diào)用,系統(tǒng)會(huì)默認(rèn)去執(zhí)行。構(gòu)造方法支持重載,如果用戶自己沒有重新定義構(gòu)造方法,系統(tǒng)就自動(dòng)執(zhí)行默認(rèn)的構(gòu)造方法。

  析構(gòu)方法__del__(self)在釋放對象時(shí)調(diào)用,支持重載,可以在里面進(jìn)行一些釋放資源的操作,不需要顯示調(diào)用。

?五.類屬性、實(shí)例屬性、類方法、實(shí)例方法以及靜態(tài)方法

  了解一些基本概念后,我們來學(xué)學(xué)python中這幾個(gè)概念的區(qū)別。

  在前面的例子中,我們接觸到的就是類屬性,顧名思義,就是類對象所擁有的屬性,它被所有類對象的實(shí)例對象所共有,在內(nèi)存中只存一個(gè)副本,這個(gè)和c++中類的靜態(tài)成員變量有些類似。對于公有的類屬性,可以通過類對象和實(shí)例對象調(diào)訪問。

?

class people(object):name = 'TOM' #公有類屬性__age = 18 #私有類屬性 p = people()print(p.name) print((people.name))print(p.__age) print(people.__age)

  實(shí)例屬性是不需要在類中顯示定義的。

class animal(object):name = 'cat'a = animal()a.sex = 'male'print(a.name) #正確 print(a.sex) #正確print(animal.name) #正確 print(animal.sex) #錯(cuò)誤

  在類外對類對象people進(jìn)行實(shí)例化之后,產(chǎn)生了一個(gè)實(shí)例對象p,然后p.age = 12這句給p添加了一個(gè)實(shí)例屬性age,賦值為12。這個(gè)實(shí)例屬性是實(shí)例對象p所特有的,注意,類對象people并不擁有它(所以不能通過類對象來訪問這個(gè)age屬性)。當(dāng)然還可以在實(shí)例化對象的時(shí)候給age賦值。

class people(object):name = 'jack'#__init__()是內(nèi)置的構(gòu)造方法,在實(shí)例化對象時(shí)自動(dòng)調(diào)用def __init__(self,age):self.age = agep = people(12) print (p.name) #正確 print (p.age) #正確print (people.name) #正確 print (people.age) #錯(cuò)誤

  如果需要在類外修改類屬性,必須通過類對象去引用然后進(jìn)行修改。如果通過實(shí)例對象去引用,會(huì)產(chǎn)生一個(gè)同名的實(shí)例屬性,這種方式修改的是實(shí)例屬性,不會(huì)影響到類屬性,并且之后如果通過實(shí)例對象去引用該名稱的屬性,實(shí)例屬性會(huì)強(qiáng)制屏蔽掉類屬性,即引用的是實(shí)例屬性,除非刪除了該實(shí)例屬性。

class people(object):country = 'china'print (people.country) p = people() print (p.country) p.country = 'japan' print (p.country) #實(shí)例屬性會(huì)屏蔽掉同名的類屬性 print (people.country) del p.country #刪除實(shí)例屬性 print (p.country)

?  運(yùn)行結(jié)果:

china china japan china china

  下面來看下類方法、實(shí)例方法和靜態(tài)方法的區(qū)別。

  類方法:類對象所擁有的方法,需要用修飾器"@classmethod"來標(biāo)識(shí)其為類方法。對于類方法,第一個(gè)參數(shù)必須為類對象,已辦以"cls"作為第一個(gè)參數(shù)(當(dāng)然也可以用其他名稱的變量作為第一個(gè)參數(shù),但習(xí)慣以"cls"為第一個(gè)參數(shù)),可以通過實(shí)例對象和類對象去訪問。

class Country(object):name = 'china'# 類方法,用classmethod來標(biāo)識(shí) @classmethoddef getprovince(cls):return cls.namec = Country()print(c.getprovince()) print(Country.getprovince())

  類方法還有一個(gè)用途就是可以對類屬性進(jìn)行修改:

class people(object):country = 'china'#類方法,用classmethod來進(jìn)行修飾 @classmethoddef getCountry(cls):return cls.country@classmethoddef setCountry(cls,country):cls.country = countryp = people() print (p.getCountry()) #可以用過實(shí)例對象引用 print (people.getCountry()) #可以通過類對象引用 p.setCountry('Italy') print (p.getCountry()) print (people.getCountry())

  運(yùn)行結(jié)果:

china china Italy Italy

  運(yùn)行結(jié)果顯示在使用類方法實(shí)例對象對類屬性修改之后,通過類對象和實(shí)例對象訪問都發(fā)生改變。

?

  實(shí)例方法:在類中最常定義的成員方法,它至少有一個(gè)參數(shù)并且必須以實(shí)例對象作為其第一個(gè)參數(shù),一般以名為'self'的變量作為第一個(gè)參數(shù)(當(dāng)然可以以其他名稱的變量作為第一個(gè)參數(shù))。在類外實(shí)例方法只能通過實(shí)例對象去調(diào)用,不能通過其他方式去調(diào)用。

class people:country = 'china'#實(shí)例方法def getCountry(self):return self.countryp = people() print (p.getCountry()) #正確,可以用過實(shí)例對象引用 print (people.getCountry()) #錯(cuò)誤,不能通過類對象引用實(shí)例方法

?

  靜態(tài)方法:需要通過修飾器"@staticmethod"來進(jìn)行修飾,靜態(tài)方法不需要多定義參數(shù)。

class people(object):country = 'china'@staticmethod#靜態(tài)方法def getCountry():return people.countryprint (people.getCountry())

  從類方法和實(shí)例方法以及靜態(tài)方法的定義形式就可以看出來,類方法的第一個(gè)參數(shù)是類對象cls,那么通過cls引用的必定是類對象的屬性和方法;而實(shí)例方法的第一個(gè)參數(shù)是實(shí)例對象self,那么通過self引用的可能是類屬性、也有可能是實(shí)例屬性(這個(gè)需要具體分析),不過在存在相同名稱的類屬性和實(shí)例屬性的情況下,實(shí)例屬性優(yōu)先級更高。靜態(tài)方法中不需要額外定義參數(shù),因此在靜態(tài)方法中引用類屬性的話,必須通過類對象來引用。

轉(zhuǎn)載于:https://www.cnblogs.com/wuxiaoyu-1537/p/7615680.html

總結(jié)

以上是生活随笔為你收集整理的Python 面向对象编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。