91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python類和實例的屬性機制原理是什么

發布時間:2021-06-04 15:02:24 來源:億速云 閱讀:169 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關Python類和實例的屬性機制原理是什么的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

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

實例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的值沒有發生變化,說明如果類變量是可變的,那么可以通過實例來對類變量進行修改,如果類變量不可變,那么實例無法修改類變量。

實例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中,已經給實例動態綁定了一個another的屬性,值為2(因為有賦值語句)。在self.__dict__中可以看到確實出現了實例屬性another。

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

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

總結

1. 動態綁定到實例的屬性位于self.__dict__中

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

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

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

感謝各位的閱讀!關于“Python類和實例的屬性機制原理是什么”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

虎林市| 措勤县| 岳普湖县| 昂仁县| 普兰店市| 灵山县| 仁怀市| 隆回县| 大悟县| 泰顺县| 定州市| 绥江县| 临海市| 和林格尔县| 成都市| 遂昌县| 延安市| 浑源县| 北碚区| 固原市| 土默特左旗| 普格县| 鄯善县| 商洛市| 双柏县| 景谷| 榆中县| 明溪县| 桐柏县| 青神县| 边坝县| 富蕴县| 灵山县| 富锦市| 阳曲县| 贵德县| 名山县| 东丰县| 景谷| 阳山县| 文安县|