色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

Python類和實(shí)例的屬性機(jī)制原理詳解

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

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

實(shí)例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()

輸出結(jié)果:

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

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

實(shí)例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()

輸出結(jié)果:

{’another’: 2} hello world 2 13

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

在使用實(shí)例訪問屬性(變量與方法)時(shí),如果在實(shí)例的屬性集里沒有找到對(duì)應(yīng)的屬性,那么就會(huì)到類的屬性集里找對(duì)應(yīng)的屬性。self.work和self.kind和類變量保持一致,說明并沒有事先在實(shí)例與類變量之間建立引用,而是動(dòng)態(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()

輸出結(jié)果:

{’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__中保存了動(dòng)態(tài)綁定到實(shí)例的變量與方法,只要出現(xiàn)了賦值語句,都是動(dòng)態(tài)綁定屬性。如果動(dòng)態(tài)綁定的屬性與類的變量或方法同名,在查找過程中就會(huì)覆蓋類的變量和方法。

總結(jié)

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

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

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

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

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

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 欧美成人做性视频在线播放 | 亚洲观看视频 | 日本在线视频不卡 | 亚洲一区二区三区首页 | 一区二区三区四区产品乱码伦 | 亚洲国产福利精品一区二区 | 国产一区二区三区在线观看免费 | 免费高清特级毛片 | 国产手机在线视频放线视频 | 日本久久免费 | 亚洲精品午夜一区二区在线观看 | 欧美一级久久久久久久大 | 交videos人妖 | 亚洲一区二区三区四区五区六区 | 亚洲精品国产成人99久久 | 99久久国产免费福利 | 99小视频| 超清波多野结衣精品一区 | 久久精品视频3 | 性做久久久久久免费观看 | 亚洲美女自拍视频 | 国产精品午夜免费观看网站 | 91久久精品国产一区二区 | 国产高清天干天天视频 | 99热久久国产精品这 | 99爱免费观看视频在线 | 孕妇xxxx视频在线 | 亚洲国产高清在线精品一区 | 日韩一级在线 | 青草青99久久99九九99九九九 | 午夜一区二区福利视频在线 | 亚洲天堂久久 | 另类欧美日韩 | 99久久精品费精品国产一区二区 | 国产精品免费看久久久香蕉 | 成人免费手机在线看网站 | 大伊香蕉精品视频在线天堂 | 日本一级毛片片在线播放 | 一级美女黄色片 | 精品在线一区 | 国产喷水女王在线播放 |