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

Python中的反射知識(shí)點(diǎn)總結(jié)

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

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

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

# hasattr(object,name_str) 判斷object對(duì)象是否有一個(gè)名為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("請(qǐng)輸入方法或者屬性").strip()
# hasattr(object,name_str) 判斷object對(duì)象是否有一個(gè)名為name_str的方法或者屬性
if hasattr(p1, name_str):
   ''' 
   如果有就可以使用getattr(object, name_str, default=None) 方法獲取object對(duì)象里
   對(duì)應(yīng)的方法或者屬性的內(nèi)存地址
   如果是屬性:直接返回屬性值
   如果是方法:返回方法的內(nèi)存地址     
   '''
   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("該對(duì)象沒有這些屬性和方法")

判斷和獲取的演示

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

def bulk(self):
    print("這是在%s對(duì)象的類外部創(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("請(qǐng)輸入您的方法或者屬性").strip()
if hasattr(p1, name_str):
    a = getattr(p1, name_str)
    a()
else:  #如果沒有這個(gè)方法,那么為其創(chuàng)建一個(gè)已經(jīng)存在的方法
    """
    setattr(p1, name_str, bulk)
    為對(duì)象p1添加一個(gè)已經(jīng)存在的bulk的方法,命名為name_str
    """
    setattr(p1, name_str, bulk)
    a = getattr(p1, name_str)
    a(p1)
"""
運(yùn)行結(jié)果
請(qǐng)輸入您的方法或者屬性u(píng)i
這是在某人飛對(duì)象的類外部創(chuàng)建的方法
"""

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

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

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

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

運(yùn)行結(jié)果:
請(qǐng)輸入您的方法或者屬性age
20
"""

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

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

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

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

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

print(p1.name)
p1.fun()
"""
運(yùn)行結(jié)果:
請(qǐng)輸入您的方法或者屬性name
AttributeError: 'Person' object has no attribute 'name'

運(yùn)行結(jié)果:
請(qǐng)輸入您的方法或者屬性fun
AttributeError: fun
"""

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

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

到此這篇關(guān)于Python中的反射知識(shí)點(diǎn)總結(jié)的文章就介紹到這了,更多相關(guān)Python中的反射內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 夯實(shí)基礎(chǔ)Python列表的索引和切片使用示例

    夯實(shí)基礎(chǔ)Python列表的索引和切片使用示例

    這篇文章主要為大家介紹了Python列表的索引和切片使用示例基礎(chǔ)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-10-10
  • OPENCV攝像頭讀取視頻的實(shí)現(xiàn)示例

    OPENCV攝像頭讀取視頻的實(shí)現(xiàn)示例

    本文主要介紹了OPENCV攝像頭讀取視頻,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-09-09
  • 使用Python程序抓取新浪在國內(nèi)的所有IP的教程

    使用Python程序抓取新浪在國內(nèi)的所有IP的教程

    這篇文章主要介紹了使用Python程序抓取新浪在國內(nèi)的所有IP的教程,作為Python網(wǎng)絡(luò)編程中獲取IP的一個(gè)小實(shí)踐,需要的朋友可以參考下
    2015-05-05
  • Django框架下在視圖中使用模版的方法

    Django框架下在視圖中使用模版的方法

    這篇文章主要介紹了Django框架下在視圖中使用模版的方法,Django是Python豐富多彩的眾框架中最有人氣的一個(gè),需要的朋友可以參考下
    2015-07-07
  • python unittest單元測(cè)試的步驟分析

    python unittest單元測(cè)試的步驟分析

    在本篇文章里小編給大家整理了一篇關(guān)于python unittest單元測(cè)試的步驟,對(duì)此有興趣的朋友們可以跟著學(xué)習(xí)下。
    2021-08-08
  • Python?OpenCV形態(tài)學(xué)運(yùn)算示例詳解

    Python?OpenCV形態(tài)學(xué)運(yùn)算示例詳解

    這篇文章主要為大家介紹了OpenCV中的幾個(gè)形態(tài)學(xué)運(yùn)算,例如:腐蝕&膨脹、開&閉運(yùn)算、梯度運(yùn)算、頂帽運(yùn)算黑帽運(yùn)算,感興趣的可以了解一下
    2022-04-04
  • 基于Python生成個(gè)性二維碼過程詳解

    基于Python生成個(gè)性二維碼過程詳解

    這篇文章主要介紹了基于Python生成個(gè)性二維碼過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Python如何讀取json文件

    Python如何讀取json文件

    這篇文章主要介紹了Python如何讀取json文件問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • python-docx文件路徑問題的解決方案

    python-docx文件路徑問題的解決方案

    這篇文章主要介紹了python-docx文件路徑問題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 零基礎(chǔ)寫python爬蟲之使用urllib2組件抓取網(wǎng)頁內(nèi)容

    零基礎(chǔ)寫python爬蟲之使用urllib2組件抓取網(wǎng)頁內(nèi)容

    文章詳細(xì)介紹了在python2.5環(huán)境下,如何使用urllib2這個(gè)python自帶的組件進(jìn)行抓取指定網(wǎng)頁內(nèi)容的,整個(gè)過程記錄的非常的詳細(xì),也很簡單,有需要的朋友可以參考下,寫出自己的python爬蟲
    2014-11-11

最新評(píng)論

祥云县| 清水河县| 高州市| 奉新县| 无极县| 安国市| 龙川县| 漳州市| 大连市| 深水埗区| 新巴尔虎左旗| 璧山县| 伊川县| 资源县| 漳州市| 扎赉特旗| 繁昌县| 武强县| 萨嘎县| 尼玛县| 皮山县| 隆回县| 沁水县| 曲靖市| 苏尼特左旗| 兰坪| 尼勒克县| 克拉玛依市| 大冶市| 南开区| 长汀县| 南充市| 搜索| 当阳市| 博湖县| 新田县| 尉犁县| 文成县| 渭源县| 崇义县| 略阳县|