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

Python中的反射知識點總結

 更新時間:2021年11月19日 08:29:20   作者:J.Feng  
在本篇文章里小編給大家整理了一篇關于Python中的反射知識點總結內容,有需要的朋友們可以跟著學習參考下。

通過字符串映射或修改程序運行時的狀態(tài)、屬性、方法, 可以通過下面這4中方法

''' 
   使用getattr(object, name_str, default=None) 方法獲取object對象里
   對應的方法或者屬性的內存地址
   如果是屬性:直接返回屬性值
   如果是方法:返回方法的內存地址     
   '''

# hasattr(object,name_str) 判斷object對象是否有一個名為name_str的方法或者屬性

代碼演示:

# -*- coding:utf8 -*-
class  Person(object):
    def __init__(self, name):
        self.name = name

    def fun(self):
        print("%s正在玩耍" % self.name)

p1 = Person("某人飛")

name_str = input("請輸入方法或者屬性").strip()
# hasattr(object,name_str) 判斷object對象是否有一個名為name_str的方法或者屬性
if hasattr(p1, name_str):
   ''' 
   如果有就可以使用getattr(object, name_str, default=None) 方法獲取object對象里
   對應的方法或者屬性的內存地址
   如果是屬性:直接返回屬性值
   如果是方法:返回方法的內存地址     
   '''
   print(getattr(p1, name_str , 80))
   # >>>name: 某人飛
   # >>>fun : <bound method Person.fun of <__main__.Person object at 0x0000020B76A81370>>
   # 所以如果是方法,那么可以這么處理
   a = getattr(p1, name_str)
   a()
else:
    print("該對象沒有這些屬性和方法")

判斷和獲取的演示

如果對象沒有從鍵盤錄入的該方法,那么可以使用,setattr添加一個方法

def bulk(self):
    print("這是在%s對象的類外部創(chuàng)建的方法"%self.name)


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

    def fun1(self):
        print("%s正在玩耍" % self.name)

p1 = Person("某人飛")
name_str = input("請輸入您的方法或者屬性").strip()
if hasattr(p1, name_str):
    a = getattr(p1, name_str)
    a()
else:  #如果沒有這個方法,那么為其創(chuàng)建一個已經存在的方法
    """
    setattr(p1, name_str, bulk)
    為對象p1添加一個已經存在的bulk的方法,命名為name_str
    """
    setattr(p1, name_str, bulk)
    a = getattr(p1, name_str)
    a(p1)
"""
運行結果
請輸入您的方法或者屬性ui
這是在某人飛對象的類外部創(chuàng)建的方法
"""

setattr(p1, name_str, bulk)添加方法

如果對象沒有從鍵盤錄入的該方法,那么可以使用,setattr添加一個屬性

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

p1 = Person("某人飛")
name_str = input("請輸入您的方法或者屬性").strip()
if hasattr(p1, name_str):
    a = getattr(p1, name_str)
    print(a)
    # 也可以同setattr修該已有屬性的值
    setattr(p1, name_str, "飛")
    print(p1.name)
else:  #如果沒有這個屬性,那么為其添加一個屬性 ,并為其設置一個默認值20
    setattr(p1, name_str, 20)
    a = getattr(p1, name_str)
    print(a)
"""
運行結果:
請輸入您的方法或者屬性name
某人飛
飛

運行結果:
請輸入您的方法或者屬性age
20
"""

setattr(p1, name_str, index)添加屬性

刪除對象中的屬性和方法(其中方法并不能刪除

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

    def fun(self):
        print("這是一個實例方法")

p1 = Person("某人飛")
name_str = input("請輸入您的方法或者屬性").strip()
if hasattr(p1, name_str):
    # 刪除這個對象的屬性或者方法
    delattr(p1, name_str)
else:
    pass

print(p1.name)
p1.fun()
"""
運行結果:
請輸入您的方法或者屬性name
AttributeError: 'Person' object has no attribute 'name'

運行結果:
請輸入您的方法或者屬性fun
AttributeError: fun
"""

delattr(p1, name_str)只能刪除屬性,和動態(tài)添加的方法

注意:通過delattr能夠刪除通過setattr動態(tài)添加的方法,其實也是一個假象。真相是通過setattr添加的一個方法并不是真的給這個對象添加了一個方法,而是添加了一個屬性,setattr方法的第二個參數(shù)就是這個屬性的名字,然后這個屬性的值是一個指向外部函數(shù)的引用地址,所以當我們調用這個對象的屬性時,實際上是間接調用了這個函數(shù),看起來就像是這個對象添加了一個方法一樣,但本質上仍然是添加的一個屬性。不管是setattr和delattr,其實都只能針對對象的屬性進行操作,它們對對象的方法是無法直接操作的。

到此這篇關于Python中的反射知識點總結的文章就介紹到這了,更多相關Python中的反射內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Python+OpenCV實現(xiàn)相機標定的方法詳解

    Python+OpenCV實現(xiàn)相機標定的方法詳解

    opencv中內置了張正友的棋盤格標定法,通過一些姿態(tài)各異的棋盤格圖像,可以標定相機的內外參數(shù),本文為大家介紹OpenCV進行相機標定的具體方法,希望對大家有所幫助
    2023-05-05
  • CentOS 7下Python 2.7升級至Python3.6.1的實戰(zhàn)教程

    CentOS 7下Python 2.7升級至Python3.6.1的實戰(zhàn)教程

    Centos是目前最為流行的Linux服務器系統(tǒng),其默認的Python 2.x,這篇文章主要給大家分享了關于在CentOS 7下Python 2.7升級至Python3.6.1的實戰(zhàn)教程,文中將升級的步驟一步步的介紹的非常詳細,對大家的理解和學習具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • python中selenium操作下拉滾動條的幾種方法匯總

    python中selenium操作下拉滾動條的幾種方法匯總

    這篇文章主要介紹了python中selenium操作下拉滾動條的幾種方法匯總,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • 七個非常實用的Python工具包總結

    七個非常實用的Python工具包總結

    Python 擁有海量的包,無論是普通任務還是復雜任務,我們經常在應用程序中使用大量的工具包.本文我將討論一些常被低估的數(shù)據(jù)科學包,包括:數(shù)據(jù)清理、應用程序開發(fā)和調試方面,需要的朋友可以參考下
    2021-06-06
  • Numpy創(chuàng)建NumPy矩陣的簡單實現(xiàn)

    Numpy創(chuàng)建NumPy矩陣的簡單實現(xiàn)

    本文主要介紹了Numpy創(chuàng)建NumPy矩陣的簡單實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Python實現(xiàn)SQL注入檢測插件實例代碼

    Python實現(xiàn)SQL注入檢測插件實例代碼

    這篇文章主要給大家介紹了關于Python實現(xiàn)SQL注入檢測插件的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-02-02
  • python實現(xiàn)的jpg格式圖片修復代碼

    python實現(xiàn)的jpg格式圖片修復代碼

    這篇文章主要介紹了python實現(xiàn)的jpg格式圖片修復代碼,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • pandas的排序、分組groupby及cumsum累計求和方式

    pandas的排序、分組groupby及cumsum累計求和方式

    這篇文章主要介紹了pandas的排序、分組groupby及cumsum累計求和方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • python讀取TXT到數(shù)組及列表去重后按原來順序排序的方法

    python讀取TXT到數(shù)組及列表去重后按原來順序排序的方法

    這篇文章主要介紹了python讀取TXT到數(shù)組及列表去重后按原來順序排序的方法,涉及Python操作txt文件、列表去重及排序的相關技巧,需要的朋友可以參考下
    2015-06-06
  • 使用 Python 合并多個格式一致的 Excel 文件(推薦)

    使用 Python 合并多個格式一致的 Excel 文件(推薦)

    這篇文章主要介紹了使用 Python 合并多個格式一致的 Excel 文件,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12

最新評論