摘要:放假歸來(lái)一概念類(lèi)對(duì)象類(lèi)名實(shí)例對(duì)象通過(guò)類(lèi)創(chuàng)建的對(duì)象類(lèi)屬性類(lèi)對(duì)象所擁有的屬性。但是類(lèi)本身的數(shù)據(jù)屬性沒(méi)有受到影響,仍存在類(lèi)域中,可以通過(guò)類(lèi)屬性訪問(wèn)。因?yàn)橄嗤Q的實(shí)例屬性將屏蔽掉類(lèi)屬性。
放假歸來(lái) ~~~
類(lèi)對(duì)象:類(lèi)名
實(shí)例對(duì)象:通過(guò)類(lèi)創(chuàng)建的對(duì)象
類(lèi)屬性:類(lèi)對(duì)象所擁有的屬性。歸類(lèi)所有,被類(lèi)對(duì)象和實(shí)例對(duì)象所共有。
類(lèi)的公有屬性可以在類(lèi)外被訪問(wèn)。
實(shí)例屬性:實(shí)例對(duì)象所特有的屬性,類(lèi)對(duì)象不能擁有,即不能通過(guò)類(lèi)對(duì)象調(diào)用。
實(shí)例屬性可以放在構(gòu)造方法__init__()中,也可以在創(chuàng)建實(shí)例對(duì)象后,進(jìn)行綁定。
我們通過(guò)創(chuàng)建一個(gè)學(xué)生類(lèi)來(lái)進(jìn)行說(shuō)明。
class Student1(object): version = 1.0 # 類(lèi)的公有數(shù)據(jù)屬性 __v = 66 # 類(lèi)的私有數(shù)據(jù)屬性 # 構(gòu)造方法里的實(shí)例屬性,在類(lèi)創(chuàng)建實(shí)例時(shí)自動(dòng)被調(diào)用 def __init__(self ,name,score): self.name = name self.score = score # 類(lèi)的方法屬性,通過(guò)類(lèi)實(shí)例化對(duì)象訪問(wèn) def updateScore(self,new_score): self.score = new_score
then,嘗試通過(guò)類(lèi)對(duì)象和實(shí)例對(duì)象來(lái)訪問(wèn)類(lèi)的公有數(shù)據(jù)屬性。對(duì)于實(shí)例沒(méi)有而類(lèi)有的屬性,會(huì)繼續(xù)查找類(lèi)的屬性。
>>> b = Student1("xlp","100") >>> Student1.version # 通過(guò)類(lèi)來(lái)訪問(wèn)類(lèi)的數(shù)據(jù)屬性 1.0 >>> b.version # 通過(guò)類(lèi)實(shí)例訪問(wèn)類(lèi)的數(shù)據(jù)屬性,打印version屬性 1.0 # 因?yàn)閷?shí)例并沒(méi)有該屬性,所以會(huì)繼續(xù)查找class的version屬性
but,當(dāng)類(lèi)屬性和實(shí)例屬性相同且混用的時(shí)候,會(huì)出現(xiàn)點(diǎn)問(wèn)題。
我們先通過(guò)類(lèi)來(lái)修改類(lèi)的數(shù)據(jù)屬性。修改后,類(lèi)和實(shí)例對(duì)象均可訪問(wèn)。
>>>Student1.version += 0.1 >>>Student1.version # 或者b.version 1.1
再通過(guò)類(lèi)實(shí)例對(duì)象來(lái)修改類(lèi)屬性:
>>>b.version += 0.1 # 試圖通過(guò)類(lèi)對(duì)象來(lái)修改類(lèi)屬性 >>>b.version # 效果等同于b.version = Student.version + 0.1 1.2 # 由于實(shí)例屬性優(yōu)先級(jí)高于類(lèi)屬性,因此會(huì)屏蔽掉類(lèi)的version屬性 1.1 >>>Student1.version 1.1 # 此時(shí)Student.version仍為1.1
其實(shí),在上面實(shí)例對(duì)象修改類(lèi)數(shù)據(jù)屬性時(shí),創(chuàng)建了一個(gè)名為version的新實(shí)例屬性,覆蓋了類(lèi)屬性的引用。
但是類(lèi)本身的數(shù)據(jù)屬性沒(méi)有受到影響,仍存在類(lèi)域中,可以通過(guò)類(lèi)屬性訪問(wèn)。
如果將b.version屬性進(jìn)行刪除del,之后b.version就可以重新訪問(wèn)類(lèi)數(shù)據(jù)屬性了。
>>>del b.version # 刪除實(shí)例屬性 >>>b.version # 由于實(shí)例的version屬性沒(méi)有找到,類(lèi)的屬性就顯示出來(lái)了 1.1
所以,實(shí)例屬性和類(lèi)屬性不要使用相同的名字。因?yàn)橄嗤Q的實(shí)例屬性將屏蔽掉類(lèi)屬性。
可以通過(guò)實(shí)例綁定、訪問(wèn)實(shí)例的屬性,舉例說(shuō)明:
>>> b.name "xlp" >>>b.updateSocore(100) # 通過(guò)實(shí)例訪問(wèn)類(lèi)方法屬性 >>>b.score 100
但是,但是,但是,當(dāng)類(lèi)數(shù)據(jù)屬性為可變對(duì)象時(shí),比如dict類(lèi)型,情況又會(huì)有點(diǎn)不一樣了。例如:
當(dāng)類(lèi)屬性為可變對(duì)象時(shí),通過(guò)實(shí)例對(duì)象來(lái)修改類(lèi)屬性時(shí),會(huì)修改類(lèi)屬性,且在刪除實(shí)例屬性時(shí)會(huì)報(bào)錯(cuò)。
所以,使用類(lèi)對(duì)象來(lái)修改類(lèi)屬性,不要使用實(shí)例對(duì)象來(lái)修改類(lèi)屬性。
? thanks for watching, keep on updating...
點(diǎn)個(gè)贊再走吧
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/42619.html
摘要:實(shí)例變量與類(lèi)變量事實(shí)上,字段除了獨(dú)屬于實(shí)例之外,跟普通變量沒(méi)有什么差別,所以實(shí)例的字段也被稱為實(shí)例變量。在類(lèi)的定義中,與實(shí)例變量對(duì)應(yīng)的還有類(lèi)變量,類(lèi)變量與實(shí)例變量類(lèi)似,通過(guò)操作符來(lái)訪問(wèn)。類(lèi)變量跟類(lèi)的方法都可以被稱為類(lèi)的成員。 該系列文章: 《python入門(mén),編程基礎(chǔ)概念介紹(變量,條件,函數(shù),循環(huán))》 《python中的數(shù)據(jù)類(lèi)型(list,tuple,dict,set,None)》...
摘要:類(lèi)對(duì)象被創(chuàng)建時(shí)存在于類(lèi)命名空間內(nèi)的所有名稱都是有效的屬性名稱。類(lèi)的實(shí)例化,是使用函數(shù)表示法,可以把類(lèi)對(duì)象看做是會(huì)返回一個(gè)新的類(lèi)實(shí)例的函數(shù)。這就是可變對(duì)象作為類(lèi)變量時(shí)的特性。類(lèi)變量是所有類(lèi)的實(shí)例共享的屬性和方法,實(shí)例變量是每個(gè)實(shí)例獨(dú)有的數(shù)據(jù)。 Python是面向?qū)ο蟮母呒?jí)編程語(yǔ)言,在Python里面一切都是對(duì)象:數(shù)字、字符串、元組、列表、字典、集合等內(nèi)置數(shù)據(jù)類(lèi)型,以及函數(shù)、方法、類(lèi)、模塊...
摘要:時(shí)代,如果需要手動(dòng)繼承,如多態(tài)多態(tài)是指,不同的子類(lèi)對(duì)象調(diào)用相同的父類(lèi)方法,會(huì)產(chǎn)生多態(tài)多樣結(jié)果的編程特性。 參考:黑馬程序員教程 - Python基礎(chǔ) 面向?qū)ο?OOP三大特性,且三個(gè)特性是有順序的: 封裝 繼承 多態(tài) 封裝 指的就是把現(xiàn)實(shí)世界的事務(wù),封裝、抽象成編程里的對(duì)象,包括各種屬性和方法。這個(gè)一般都很簡(jiǎn)單,不需要多講。 唯一要注意的就是:推薦從小往大開(kāi)始封裝、開(kāi)發(fā)類(lèi)。比如手槍...
摘要:在類(lèi)內(nèi)部的方法中使用時(shí)。類(lèi)的私有方法兩個(gè)下劃線開(kāi)頭,聲明該方法為私有方法,不能在類(lèi)地外部調(diào)用。先在本類(lèi)中查找調(diào)用的方法,找不到才去基類(lèi)中找。如果在繼承元組中列了一個(gè)以上的類(lèi),那么它就被稱作多重繼承。 類(lèi)定義 類(lèi)對(duì)象:創(chuàng)建一個(gè)類(lèi)之后,可以通過(guò)類(lèi)名訪問(wèn)、改變其屬性、方法 實(shí)例對(duì)象:類(lèi)實(shí)例化后,可以使用其屬性,可以動(dòng)態(tài)的為實(shí)例對(duì)象添加屬性(類(lèi)似javascript)而不影響類(lèi)對(duì)象。 類(lèi)...
摘要:縮進(jìn)不一致,會(huì)導(dǎo)致運(yùn)行錯(cuò)誤。變量變量在使用前必須先定義即賦予變量一個(gè)值,否則會(huì)報(bào)錯(cuò)數(shù)據(jù)類(lèi)型布爾只有和兩個(gè)值,表示真或假。 簡(jiǎn)介 Python 是一種高層次的結(jié)合了解釋性、編譯性、互動(dòng)性和面向?qū)ο蟮哪_本語(yǔ)言。Python 由 Guido van Rossum 于 1989 年底在荷蘭國(guó)家數(shù)學(xué)和計(jì)算機(jī)科學(xué)研究所發(fā)明,第一個(gè)公開(kāi)發(fā)行版發(fā)行于 1991 年。 特點(diǎn) 易于學(xué)習(xí):Python ...
閱讀 1833·2021-11-25 09:43
閱讀 1335·2021-11-22 15:08
閱讀 3735·2021-11-22 09:34
閱讀 3225·2021-09-04 16:40
閱讀 3002·2021-09-04 16:40
閱讀 542·2019-08-30 15:54
閱讀 1335·2019-08-29 17:19
閱讀 1752·2019-08-28 18:13