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

Python的getattr函數(shù)方法學(xué)習(xí)使用示例

 更新時間:2022年08月09日 14:19:20   作者:waws520  
這篇文章主要為大家介紹了Python的getattr方法學(xué)習(xí)使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

正文

__getattr__函數(shù)的作用: 如果屬性查找(attribute lookup)在實例以及對應(yīng)的類中(通過__dict__)失敗, 那么會調(diào)用到類的__getattr__函數(shù);

如果沒有定義這個函數(shù),那么拋出AttributeError異常。由此可見,__getattr__一定是作用于屬性查找的最后一步

舉個栗子:

class A(object):
    def __init__(self, a, b):
        self.a1 = a
        self.b1 = b
        print('init')
    def mydefault(self, *args):
        print('default:' + str(args[0]))
    def __getattr__(self, name):
        print("other fn:", name)
        return self.mydefault
a1 = A(10, 20)
a1.fn1(33)
a1.fn2('hello')

運行結(jié)果:

init
other fn: fn1
default:33
other fn: fn2
default:hello

第16行調(diào)用fn1屬性時,查找不到次屬性,程序調(diào)用__getattr__方法

用__getattr__方法可以處理調(diào)用屬性異常

class Student(object):
    def __getattr__(self, attrname):
        if attrname == "age":
            return 'age:40'
        else:
            raise AttributeError(attrname)
x = Student()
print(x.age)  # 40
print(x.name)

這里定義一個Student類和實例x,并沒有屬性age,當(dāng)執(zhí)行x.age,就調(diào)用_getattr_方法動態(tài)創(chuàng)建一個屬性,執(zhí)行x.name時,__getattr__方法沒有對其處理,拋出異常

age:40
  File "XXXX.py", line 10, in <module>
    print(x.name)
  File "XXXX.py", line 6, in __getattr__
    raise AttributeError(attrname)
AttributeError: name

下面展示一個_getattr_經(jīng)典應(yīng)用的例子,可以調(diào)用dict的鍵值對

class ObjectDict(dict):
    def __init__(self, *args, **kwargs):
        super(ObjectDict, self).__init__(*args, **kwargs)
    def __getattr__(self, name):
        value = self[name]
        if isinstance(value, dict):
            value = ObjectDict(value)
        return value
if __name__ == '__main__':
    od = ObjectDict(asf = {'a': 1}, d = True)
    print(od.asf, od.asf.a)  # {'a': 1} 1
    print(od.d)  # True

以上就是Python的getattr方法學(xué)習(xí)使用示例的詳細內(nèi)容,更多關(guān)于Python getattr方法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 詳解Python如何循環(huán)遍歷Numpy中的Array

    詳解Python如何循環(huán)遍歷Numpy中的Array

    Numpy是Python中常見的數(shù)據(jù)處理庫,是數(shù)據(jù)科學(xué)中經(jīng)常使用的庫。在本文中,我們將學(xué)習(xí)如何迭代遍歷訪問矩陣中的元素,需要的可以參考一下
    2022-04-04
  • PyCharm代碼回滾,恢復(fù)歷史版本的解決方法

    PyCharm代碼回滾,恢復(fù)歷史版本的解決方法

    今天小編就為大家分享一篇PyCharm代碼回滾,恢復(fù)歷史版本的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • Python常用庫大全及簡要說明

    Python常用庫大全及簡要說明

    本文為大家羅列了Python開發(fā)的常用庫和各個庫的簡要說明以及Python開發(fā)工具,包管理,環(huán)境管理等其它常用資源和Python學(xué)習(xí)資料
    2020-01-01
  • python3里gbk編碼的問題解決

    python3里gbk編碼的問題解決

    本文主要介紹了python3里gbk編碼的問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 在pyCharm中下載第三方庫的方法

    在pyCharm中下載第三方庫的方法

    這篇文章主要介紹了在pyCharm中下載第三方庫的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Pandas的DataFrame如何做交集,并集,差集與對稱差集

    Pandas的DataFrame如何做交集,并集,差集與對稱差集

    這篇文章主要介紹了Pandas的DataFrame如何做交集,并集,差集與對稱差集,Python的數(shù)據(jù)類型集合由不同元素組成的集合,集合中是一組無序排列的可?Hash?的值,可以作為字典的Key,下面來看看文章的詳細內(nèi)容吧
    2022-01-01
  • 開始著手第一個Django項目

    開始著手第一個Django項目

    這篇文章主要介紹了開始著手第一個Django項目的過程,Django是豐富多彩的Python框架中人氣最高的一個,功能多而全,需要的朋友可以參考下
    2015-07-07
  • 兒童編程python入門

    兒童編程python入門

    很多家長都想讓孩子學(xué)習(xí)編程,今天我們給大家分享一下關(guān)于兒童python的入門以及簡單的代碼,有興趣的朋友閱讀下吧。
    2018-05-05
  • python:刪除離群值操作(每一行為一類數(shù)據(jù))

    python:刪除離群值操作(每一行為一類數(shù)據(jù))

    這篇文章主要介紹了python:刪除離群值操作(每一行為一類數(shù)據(jù)),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 基于Python socket實現(xiàn)簡易網(wǎng)絡(luò)聊天室

    基于Python socket實現(xiàn)簡易網(wǎng)絡(luò)聊天室

    本文主要介紹了基于Python socket實現(xiàn)簡易網(wǎng)絡(luò)聊天室,本文將通過pyqt5作為桌面應(yīng)用框架,socket作為網(wǎng)絡(luò)編程的框架,從而實現(xiàn)包括客戶端和服務(wù)端的網(wǎng)絡(luò)聊天室的GUI應(yīng)用,需要的可以參考一下
    2022-07-07

最新評論