python3中類的重點(diǎn)與難點(diǎn):類屬性和實(shí)例屬性的區(qū)別說(shuō)明
先看圖理解:
類屬性就相當(dāng)與全局變量,實(shí)例對(duì)象共有的屬性,實(shí)例對(duì)象的屬性為實(shí)例對(duì)象自己私有。
類屬性就是類對(duì)象(Tool)所擁有的屬性,它被所有類對(duì)象的實(shí)例對(duì)象(實(shí)例方法)所共有,在內(nèi)存中只存在一個(gè)副本,這個(gè)和C++中類的靜態(tài)成員變量有點(diǎn)類似。對(duì)于公有的類屬性,在類外可以通過(guò)類對(duì)象和實(shí)例對(duì)象訪問(wèn)
類屬性
class People(object): name = 'Tom' #公有的類屬性 __age = 12 #私有的類屬性 p = People() print(p.name) #正確 print(People.name) #正確 print(p.__age) #錯(cuò)誤,不能在類外通過(guò)實(shí)例對(duì)象訪問(wèn)私有的類屬性 print(People.__age) #錯(cuò)誤,不能在類外通過(guò)類對(duì)象訪問(wèn)私有的類屬性
實(shí)例屬性(對(duì)象屬性)
class People(object): address = '山東' #類屬性 def __init__(self): self.name = 'xiaowang' #實(shí)例屬性 self.age = 20 #實(shí)例屬性 p = People() p.age =12 #實(shí)例屬性 print(p.address) #正確 print(p.name) #正確 print(p.age) #正確 print(People.address) #正確 print(People.name) #錯(cuò)誤 print(People.age) #錯(cuò)誤
通過(guò)實(shí)例(對(duì)象)去修改類屬性
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)
總結(jié)
如果需要在類外修改類屬性,必須通過(guò)類對(duì)象去引用然后進(jìn)行修改。如果通過(guò)實(shí)例對(duì)象去引用,會(huì)產(chǎn)生一個(gè)同名的實(shí)例屬性,這種方式修改的是實(shí)例屬性,不會(huì)影響到類屬性,并且之后如果通過(guò)實(shí)例對(duì)象去引用該名稱的屬性,實(shí)例屬性會(huì)強(qiáng)制屏蔽掉類屬性,即引用的是實(shí)例屬性,除非刪除了該實(shí)例屬性。
Python:類屬性和實(shí)例屬性總結(jié)
#類屬性:類對(duì)象所擁有的的屬性,它被所有類對(duì)象的實(shí)例對(duì)象共有,類對(duì)象和實(shí)例對(duì)象可以訪問(wèn) #實(shí)例屬性:實(shí)例對(duì)象所擁有的屬性,只能通過(guò)實(shí)例對(duì)象訪問(wèn) class Student: name='李明' #類屬性 def __init__(self,age): self.age=age #實(shí)例屬性 pass pass Student.name='鄧超' #通過(guò)類對(duì)象去修改類屬性 因?yàn)閚ame屬于類屬性 print('-----------李明的數(shù)據(jù)------------------') lm=Student(18) #實(shí)例化對(duì)象,并傳入?yún)?shù) print(lm.age) #通過(guò)實(shí)例對(duì)象去訪問(wèn)實(shí)例屬性 print(lm.name) #通過(guò)實(shí)例對(duì)象去訪問(wèn)類屬性 # lm.name='華晨宇' #不能通過(guò)實(shí)例對(duì)象對(duì)類屬性進(jìn)行修改 print(lm.name) print('--------------張三的數(shù)據(jù)--------------') zs=Student(20) print(zs.age) print(zs.name) print('------------通過(guò)類對(duì)象Student去訪問(wèn)name----------------') print(Student.name) # print(Student.age) 注:不能通過(guò)類對(duì)象去訪問(wèn)實(shí)例屬性
運(yùn)行結(jié)果
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python操作MySQL數(shù)據(jù)庫(kù)的示例代碼
這篇文章主要介紹了Python操作MySQL數(shù)據(jù)庫(kù)的方法,文中示例代碼非常詳細(xì),幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07python開(kāi)發(fā)之字符串string操作方法實(shí)例詳解
這篇文章主要介紹了python開(kāi)發(fā)之字符串string操作方法,以實(shí)例形式較為詳細(xì)的分析了Python針對(duì)字符串的轉(zhuǎn)義、連接、換行、輸出等操作技巧,需要的朋友可以參考下2015-11-11python3整數(shù)反轉(zhuǎn)的實(shí)現(xiàn)方法
這篇文章主要介紹了python3整數(shù)反轉(zhuǎn)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04利用Python實(shí)現(xiàn)普通視頻變成動(dòng)漫視頻
這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)普通視頻變成動(dòng)漫視頻效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-08-08Python Numpy學(xué)習(xí)之索引及切片的使用方法
數(shù)組中的元素可以通過(guò)索引以及切片的手段進(jìn)行訪問(wèn)或者修改,和列表的切片操作一樣。本文將詳細(xì)為大家介紹一下Python中的科學(xué)計(jì)算庫(kù)-Numpy的索引及切片的使用方法2022-01-01Python對(duì)小數(shù)進(jìn)行除法運(yùn)算的正確方法示例
這篇文章主要介紹了Python對(duì)小數(shù)進(jìn)行除法運(yùn)算的正確方法示例,正確的方法是需要轉(zhuǎn)換成浮點(diǎn)數(shù),否則永遠(yuǎn)不會(huì)得到正確結(jié)果,需要的朋友可以參考下2014-08-08Keras 切換后端方式(Theano和TensorFlow)
這篇文章主要介紹了Keras 切換后端方式(Theano和TensorFlow),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06