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