欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時間:2020年03月21日 12:56:14   作者:luoheng  
這篇文章主要介紹了Python類和實例的屬性機(jī)制原理詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

實例是具象化的類,它可以作為類訪問所有靜態(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()

輸出結(jié)果:

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

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

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

在使用實例訪問屬性(變量與方法)時,如果在實例的屬性集里沒有找到對應(yīng)的屬性,那么就會到類的屬性集里找對應(yīng)的屬性。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()

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

總結(jié)

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

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 淺析python中while循環(huán)和for循環(huán)

    淺析python中while循環(huán)和for循環(huán)

    在本篇文章里小編給各位整理的是關(guān)于python中while和for循環(huán)知識點詳解,有興趣的朋友們可以學(xué)習(xí)下。
    2019-11-11
  • Python Pygame實現(xiàn)落球游戲詳解

    Python Pygame實現(xiàn)落球游戲詳解

    本文主要介紹了利用Pygame實現(xiàn)落球小游戲,即屏幕上落下一個球,通過鼠標(biāo)移動,地下的木塊如果接上則加分,否則就減去一命,三條命用完則游戲結(jié)束。感興趣的可以學(xué)習(xí)
    2022-01-01
  • python 篩選數(shù)據(jù)集中列中value長度大于20的數(shù)據(jù)集方法

    python 篩選數(shù)據(jù)集中列中value長度大于20的數(shù)據(jù)集方法

    今天小編就為大家分享一篇python 篩選數(shù)據(jù)集中列中value長度大于20的數(shù)據(jù)集方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python爬蟲入門有哪些基礎(chǔ)知識點

    Python爬蟲入門有哪些基礎(chǔ)知識點

    在本篇文章中小編給大家整理的是關(guān)于Python爬蟲入門基礎(chǔ)知識點整理,有興趣的朋友們可以跟著學(xué)習(xí)下。
    2020-06-06
  • Python實現(xiàn)的字典值比較功能示例

    Python實現(xiàn)的字典值比較功能示例

    這篇文章主要介紹了Python實現(xiàn)的字典值比較功能,可實現(xiàn)針對字典格式數(shù)據(jù)的判斷、比較功能,涉及Python字典格式數(shù)據(jù)的遍歷、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2018-01-01
  • Python裝飾器結(jié)合遞歸原理解析

    Python裝飾器結(jié)合遞歸原理解析

    這篇文章主要介紹了Python裝飾器結(jié)合遞歸原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Django添加KindEditor富文本編輯器的使用

    Django添加KindEditor富文本編輯器的使用

    今天小編就為大家分享一篇關(guān)于Django添加KindEditor富文本編輯器的使用,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • 解決python路徑錯誤,運(yùn)行.py文件,找不到路徑的問題

    解決python路徑錯誤,運(yùn)行.py文件,找不到路徑的問題

    這篇文章主要介紹了解決python路徑錯誤,運(yùn)行.py文件,找不到路徑的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 解析Python擴(kuò)展模塊的加速方案

    解析Python擴(kuò)展模塊的加速方案

    這章我們來介紹Python的擴(kuò)展名之ctypes,教大家認(rèn)識ctypes,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2021-09-09
  • Scrapy+Selenium自動獲取cookie爬取網(wǎng)易云音樂個人喜愛歌單

    Scrapy+Selenium自動獲取cookie爬取網(wǎng)易云音樂個人喜愛歌單

    這篇文章主要介紹了Scrapy+Selenium自動獲取cookie爬取網(wǎng)易云音樂個人喜愛歌單,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02

最新評論