日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python基础学习中要懂的知识点:反射机制

發布時間:2025/3/20 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python基础学习中要懂的知识点:反射机制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

反射是什么

反射指在程序運行過程中可以動態獲取對象的信息。 是通過字符串的形式 ,導入模塊;通過字符串的形式,去模塊 尋找指定函數 ,并執行。利用字符串的形式去對象中操作成員,一種 基于字符串的驅動 。

Python反射中的內置函數

getattr()

getattr():用于獲取 對象中的屬性 ,但是其不能獲取 私有變量 也就是最前面帶 __ 的屬性或方法,getattr(object,name,default)其有三個參數

  • object :對象
  • name :對象中的屬性值
  • default :可選 該對象中不存在該屬性的時候的返回值。

例子:

class B:def __init__(self):self.name = 'Bb'self.age = 40def add(self):print('B')if __name__ == '__main__':b = B()print(getattr(b, 'name', 'not found')) # 輸出:Bbprint(getattr(b, 'cc', 'not found')) # 輸出:not foundfunc = getattr(b,'add',None)print(func) # 輸出:<bound method B.add of <__main__.B object at 0x00000248C7F48648>>func() # 輸出:B

hasattr()

hasattr(object,name)該函數用于檢測對象( object )中是否含有name (指的是某個屬性名而并不是指name) 這個屬性,其中object是對象,name是指需要檢查該對象中是否存在的屬性的名稱。

例子:

''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' class B:def __init__(self):self.name = 'Bb'self.age = 40def add(self):print('B')if __name__ == '__main__':b = B()print(hasattr(b, 'ccc')) # Falseprint(hasattr(b, 'add')) # True

setattr()

setattr(object,name,value)是指給某個對象某個屬性設置指定的值,object是對象,name是對象中的屬性名,value是你想要設的值。其中三個參數都是必須的填的。

該函數可以給對象增加新的屬性并且可以將對象中的方法改變。

例子:

class B:def __init__(self):self.name = 'Bb'self.age = 40def add(self):print('B')if __name__ == '__main__':b = B()print(b.age) # 40setattr(b,'age',50)print(b.age) # 50def cc():print('i am changed')b.add() # Bsetattr(b,'add',cc)b.add() # i am changed# print(dir(b))

delattr()

delattr(object,name)指刪除對象中的指定屬性,其中object是對象,name是對象中的屬性名。

例子:

''' 學習中遇到問題沒人解答?小編創建了一個Python學習交流QQ群:531509025 尋找有志同道合的小伙伴,互幫互助,群里還有不錯的視頻學習教程和PDF電子書! ''' class B:def __init__(self):self.name = 'Bb'self.age = 40def add(self):print('B')if __name__ == '__main__':b = B()print(dir(b)) # [,'add', 'age', 'name'] dir()函數會輸出一大堆,在這里我把輸出的一些屬性名直接刪除了print(hasattr(b,'age')) # Truedelattr(b,'age')print(dir(b)) # [,'add', 'name']print(hasattr(b,'age')) # False

我在這里再補充說明下 dir() 這個函數: dir()不帶變量時候用于獲取當前范圍內的變量、方法和定義的類型列表;帶參數時返回參數的屬性、方法列表。

  • dir(object) object:對象、變量、類型

以上就是python反射中的四個內置函數。

python反射的應用

反射的一個應用就是 web框架 中的 url路由 ,用戶通過輸入 url路由 就可以定位到 views視圖 中的函數,這里面主要應用了 getattr() 這個函數,一個用于獲取 views視圖中對應函數 ,如果沒有就返回你設定的值以此判斷是否可以往下執行。

總結

以上是生活随笔為你收集整理的python基础学习中要懂的知识点:反射机制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。