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

小結(jié)Python的反射機制

 更新時間:2020年09月28日 10:12:18   作者:topass123  
這篇文章主要介紹了Python的反射機制,幫助大家更好的理解和使用python,感興趣的朋友可以了解下

前言:

前兩天用Python實現(xiàn)了ftp服務(wù)器。在小項目中就用到了反射。因此寫個筆記鞏固下。

反射的定義:檢測和修改它本身狀態(tài)或行為的一種能力(自省)。

而通過反射,Python可以通過字符串的映射或修改程序運行的狀態(tài)和方法。

反射的四個方法。hasattr,getattr,setattr,delattr

hasattr:判斷一個方法是否存在與這個類中

class Person(object):
  def __init__(self,name):
    self.name = name
  def talk(self):
    print("%s正在交談"%self.name)

p = Person("laowang")    
print(hasattr(p,"talk"))  # True。因為存在talk方法
print(hasattr(p,"name"))  # True。因為存在name變量
print(hasattr(p,"abc"))   # False。因為不存在abc方法或變量

getattr:根據(jù)字符串去獲取obj對象里的對應(yīng)的方法的內(nèi)存地址,加"()"括號即可執(zhí)行

class Person(object):
  def __init__(self,name):
    self.name = name
  def talk(self):
    print("%s正在交談"%self.name)
p = Person("laowang")

n = getattr(p,"name")  # 獲取name變量的內(nèi)存地址
print(n)        # 此時打印的是:laowang

f = getattr(p,"talk")  # 獲取talk方法的內(nèi)存地址
f()           # 調(diào)用talk方法

我們發(fā)現(xiàn)getattr有三個參數(shù),那么第三個參數(shù)是做什么用的呢?
s = getattr(p,"abc","not find")
print(s)        # 打印結(jié)果:not find。因為abc在對象p中找不到,本應(yīng)該報錯,但因為修改了找不到就輸出not find

setattr:通過setattr將外部的一個函數(shù)綁定到實例中

def abc(self):
  print("%s正在交談"%self.name)

class Person(object):
  def __init__(self,name):
    self.name = name

p = Person("laowang")
setattr(p,"talk",abc)  # 將abc函數(shù)添加到對象中p中,并命名為talk
p.talk(p)        # 調(diào)用talk方法,因為這是額外添加的方法,需手動傳入對象


setattr(p,"age",30)   # 添加一個變量age,復制為30
print(p.age)      # 打印結(jié)果:30

delattr:刪除一個實例或者類中的方法

class Person(object):
  def __init__(self,name):
    self.name = name
  def talk(self):
    print("%s正在交談"%self.name)

p = Person("laowang")

delattr(p,"name")    # 刪除name變量
print(p.name)      # 此時將報錯

為什么用反射

好處一:

實現(xiàn)可插拔機制

可以事先定義好接口,接口只有在被完成后才會真正執(zhí)行,這實現(xiàn)了即插即用,這其實是一種‘后期綁定'

好處二:

動態(tài)導入模塊(基于反射當前模塊成員)

以上就是小結(jié)Python的反射機制的詳細內(nèi)容,更多關(guān)于python 反射的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用python統(tǒng)計代碼行的示例(包括空行和注釋)

    用python統(tǒng)計代碼行的示例(包括空行和注釋)

    今天小編就為大家分享一篇用python統(tǒng)計代碼行的示例(包括空行和注釋),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 使用Python實現(xiàn)多功能課堂點名器與抽簽工具

    使用Python實現(xiàn)多功能課堂點名器與抽簽工具

    這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)多功能課堂點名器,也可以用作抽簽工具,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-02-02
  • Python 文件操作的詳解及實例

    Python 文件操作的詳解及實例

    這篇文章主要介紹了Python 文件操作的詳解及實例的相關(guān)資料,希望通過本文大家能夠理解掌握Python 文件操作的知識,需要的朋友可以參考下
    2017-09-09
  • PyTorch中可視化工具的使用

    PyTorch中可視化工具的使用

    本文主要介紹了PyTorch中可視化工具的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-04-04
  • Python sort 自定義函數(shù)排序問題

    Python sort 自定義函數(shù)排序問題

    這篇文章主要介紹了Python sort 自定義函數(shù)排序問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • python 使用tkinter與messagebox寫界面和彈窗

    python 使用tkinter與messagebox寫界面和彈窗

    這篇文章主要介紹了python 使用tkinter與messagebox寫界面和彈窗,文章內(nèi)容詳細,具有一的的參考價值,需要的小伙伴可以參考一下
    2022-03-03
  • 通過python 執(zhí)行 nohup 不生效的解決

    通過python 執(zhí)行 nohup 不生效的解決

    這篇文章主要介紹了通過python 執(zhí)行 nohup 不生效的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • python安裝numpy和pandas的方法步驟

    python安裝numpy和pandas的方法步驟

    這篇文章主要介紹了python安裝numpy和pandas的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • pygame.display.flip()和pygame.display.update()的區(qū)別及說明

    pygame.display.flip()和pygame.display.update()的區(qū)別及說明

    這篇文章主要介紹了pygame.display.flip()和pygame.display.update()的區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • matplotlib圖形整合之多個子圖繪制的實例代碼

    matplotlib圖形整合之多個子圖繪制的實例代碼

    matplotlib繪制多個子圖的時候,我們可以根據(jù)自己的想法去排列子圖的順序,也可以生成不同的子圖數(shù)量,本文就詳細的介紹了matplotlib 多子圖繪制,具有一定的參考價值,感興趣的可以了解一下
    2022-04-04

最新評論