国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術文章
文章詳情頁

Python類和實例的屬性機制原理詳解

瀏覽:40日期:2022-08-01 16:13:09

實例是具象化的類,它可以作為類訪問所有靜態(tài)綁定到類上的屬性,包括類變量與方法,也可以作為實例訪問動態(tài)綁定到實例上的屬性。

實例1:

class A: work = list('hello') kind = list('world') another = 1 def test1(self): print(self.work, self.kind, self.another) self.work[0], self.kind [0] = 't', 't' self.another += 1 print(A.work, A.kind, A.another)if __name__ == '__main__': a = A() a.test1()

輸出結果:

[’h’, ’e’, ’l’, ’l’, ’o’] [’w’, ’o’, ’r’, ’l’, ’d’] 1[’t’, ’e’, ’l’, ’l’, ’o’] [’t’, ’o’, ’r’, ’l’, ’d’] 1

test1中演示了實例對類變量的訪問與修改,從輸出結果可以看到,類變量work和kind的列表被修改了,而another的值沒有發(fā)生變化,說明如果類變量是可變的,那么可以通過實例來對類變量進行修改,如果類變量不可變,那么實例無法修改類變量。

實例2:

class A: work = list('hello') kind = list('world') another = 1 def test2(self): A.work, A.kind = 'hello', ' world' A.another += 2 print(self.__dict__) print(self.work, self.kind, self.another) A.test2 = 13 print(self.test2)if __name__ == '__main__': a = A() a.test2()

輸出結果:

{’another’: 2} hello world 2 13

test2說明了實例訪問類變量與方法的機制,在test1中,已經(jīng)給實例動態(tài)綁定了一個another的屬性,值為2(因為有賦值語句)。在self.__dict__中可以看到確實出現(xiàn)了實例屬性another。

在使用實例訪問屬性(變量與方法)時,如果在實例的屬性集里沒有找到對應的屬性,那么就會到類的屬性集里找對應的屬性。self.work和self.kind和類變量保持一致,說明并沒有事先在實例與類變量之間建立引用,而是動態(tài)查找的。

class A: work = list('hello') kind = list('world') another = 1 def test3(self): print(self.__dict__) self.w, self.k = 0, 1 print(self.__dict__) self.work, self.kind = 4, 4 print(self.__dict__) self.test1 = 12 print(self.__dict__) try: self.test1() except: print('test1 is not a bound method')if __name__ == '__main__': a = A() a.test3()

輸出結果:

{’another’: 2} {’another’: 2, ’w’: 0, ’k’: 1} {’another’: 2, ’w’: 0, ’k’: 1, ’work’: 4, ’kind’: 4} {’another’: 2, ’w’: 0, ’k’: 1, ’work’: 4, ’kind’: 4, ’test1’: 12} test1 is not a bound method

self.__dict__中保存了動態(tài)綁定到實例的變量與方法,只要出現(xiàn)了賦值語句,都是動態(tài)綁定屬性。如果動態(tài)綁定的屬性與類的變量或方法同名,在查找過程中就會覆蓋類的變量和方法。

總結

1. 動態(tài)綁定到實例的屬性位于self.__dict__中

2. 出現(xiàn)self.attribute = XXX之類的賦值語句都是在往實例上動態(tài)綁定屬性

3. 實例查找屬性的流程:self.work -> self.__dict__['work'] or cls.work,這是一個動態(tài)的過程,實例中的同名屬性會覆蓋類變量或方法,類變量或方法的修改會實時影響實例查找屬性的結果

4. 如果類變量是可修改的,如列表,字典等,可以通過實例來修改類變量,方法是不可修改的,故無法通過實例修改方法

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 在线视频观看一区 | 国产香蕉国产精品偷在线观看 | 欧美肥婆videoxxx | 国产精品自在线 | 豆国产97在线 | 亚洲 | 手机看片免费基地你懂的 | 成年女人免费视频播放成年m | 亚洲欧美精品中文字幕 | 九九色网| 337p粉嫩大胆噜噜噜鲁 | 久久精品国产第一区二区 | 国产成人三级 | 国产成人精品亚洲77美色 | 黄色三级在线 | 亚洲毛片在线看 | 一区精品视频 | 日本亚洲欧美在线 | 亚洲黄色免费观看 | 日本黄色大片在线播放视频免费观看 | 欧美日比视频 | 视频综合网 | 久久久久久网站 | 成熟的女性强烈交性视频 | 亚洲成在线观看 | 女人张开腿让男人添 | 波多野结衣一区二区在线 | 午夜在线观看cao | 亚洲天堂二区 | caoporen在线视频入口 | 国产视频中文字幕 | 日韩激情中文字幕一区二区 | 国产色视频一区二区三区 | 久久com| 成年日韩片av在线网站 | 精品国产v无码大片在线观看 | 亚洲欧美在线视频免费 | 久草在线青青草 | 欧美一级在线毛片免费观看 | 午夜国产视频 | 日本成人在线免费观看 | 91亚洲在线 |