最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

實例是具象化的類,它可以作為類訪問所有靜態(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中,已經給實例動態(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. 如果類變量是可修改的,如列表,字典等,可以通過實例來修改類變量,方法是不可修改的,故無法通過實例修改方法

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python實現(xiàn)將一個正整數(shù)分解質因數(shù)的方法分析

    Python實現(xiàn)將一個正整數(shù)分解質因數(shù)的方法分析

    這篇文章主要介紹了Python實現(xiàn)將一個正整數(shù)分解質因數(shù)的方法,結合實例形式對比分析了Python計算正整數(shù)分解質因數(shù)的算法逐步改進操作技巧,需要的朋友可以參考下
    2017-12-12
  • Django程序的優(yōu)化技巧

    Django程序的優(yōu)化技巧

    如果你的Python程序或Django項目運行速度慢,先別急著怪Python或Django。其實程序運行效率是可以通過提升硬件水平、架構和數(shù)據(jù)庫優(yōu)化和改進算法來大大提升的。今天大江哥將分享一些主要Django性能優(yōu)化手段,完全可以讓你的Django程序跑得飛快。
    2021-04-04
  • Python基于gevent實現(xiàn)文件字符串查找器

    Python基于gevent實現(xiàn)文件字符串查找器

    這篇文章主要介紹了Python基于gevent實現(xiàn)文件字符串查找器,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • Python re.sub 反向引用的實現(xiàn)

    Python re.sub 反向引用的實現(xiàn)

    反向引用指的是在指定替換結果的過程中,可以引用原始字符串中的匹配到內容,本文主要介紹了反向引用的設置方法,感興趣的可以了解一下
    2021-07-07
  • VS2022編譯安裝Qt6.5源碼教程

    VS2022編譯安裝Qt6.5源碼教程

    這篇文章主要介紹了VS2022編譯安裝Qt6.5源碼,在這里解壓方式可以使用7z解壓,也可以使用MinGW中的tar進行解壓,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • python中playwright結合pytest執(zhí)行用例的實現(xiàn)

    python中playwright結合pytest執(zhí)行用例的實現(xiàn)

    本文主要介紹了python中playwright結合pytest執(zhí)行用例的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 寫了個監(jiān)控nginx進程的Python腳本

    寫了個監(jiān)控nginx進程的Python腳本

    接上一文用iptables讓SSH服務對陌生人說不。還是有點擔心這個學期內,nginx可能會因為系統(tǒng)各種原因而出現(xiàn)異常退出,導致Web服務暫停。所以,又來了一個方案
    2012-05-05
  • 詳解Python prometheus_client使用方式

    詳解Python prometheus_client使用方式

    本文主要介紹了Python prometheus_client使用方式,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Python語言的12個基礎知識點小結

    Python語言的12個基礎知識點小結

    這篇文章主要介紹了Python語言的12個基礎知識點小結,包含正則表達式替換、遍歷目錄方法、列表按列排序、去重、字典排序等,需要的朋友可以參考下
    2014-07-07
  • Python中Pyspider爬蟲框架的基本使用詳解

    Python中Pyspider爬蟲框架的基本使用詳解

    這篇文章主要介紹了Python中Pyspider爬蟲框架的基本使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01

最新評論

芷江| 建湖县| 称多县| 通化县| 蒲城县| 皋兰县| 长白| 湖北省| 舟山市| 定襄县| 西青区| 汨罗市| 明水县| 宝兴县| 鞍山市| 剑阁县| 阿坝| 乐昌市| 大城县| 临江市| 商城县| 乌鲁木齐市| 同仁县| 赤壁市| 师宗县| 镇安县| 桃园县| 大同县| 鹤岗市| 信宜市| 泗阳县| 阜新市| 绥德县| 雷波县| 临沂市| 江华| 曲靖市| 芜湖县| 宜君县| 福州市| 扶风县|