首頁  >  文章  >  後端開發  >  描述Python類別屬性

描述Python類別屬性

coldplay.xixi
coldplay.xixi轉載
2021-01-08 10:10:541668瀏覽

描述Python類別屬性

相關免費學習推薦:python影片教學

  • __getattr__是當類別呼叫一個不存在的屬性時才會呼叫getattr魔法函數,他傳入的值item就是你這個呼叫的不存在的值。

class User(object):
    def __init__(self, name, info):
        self.name = name
        self.info = info
ls = User("李四",{"gender":"male"})print(ls.info)运行结果:{'gender': 'male'}

如果想要取得male屬性,則需要用到__getattr__魔法方法。

class User(object):
    def __init__(self, name, info):
        self.name = name
        self.info = info    def __getattr__(self, item):
        return self.info[item]ls = User("李四",{"gender":"male"})print(ls.gender)运行结果:
male
  • 屬性描述符是一個強大的通用協定。它是properties, methods, static methods, class methods
    和super()的呼叫原理。
  • 屬性描述子是實作了特定協定的類,只要實作了__get__,__set__和__delete__三個方法中的任意一個,這個類別就是描述符,它能實現對多個屬性運用相同存取邏輯的一種方式,通俗來說就是:建立一個實例,作為另一個類別的類別屬性。
  • 如果一個物件同時定義了__get__和__set__方法,它被稱為做資料描述符(data descriptor)。
    只定義__get__方法的物件則稱為非資料描述符(non-data descriptor)。
  • 使用類別方法建立描述符• 定義一個IntField類別為描述符類別• 建立​​IntField類別的實例,作為另一個User類別的屬性
class User:
    def __init__(self, age):
        self.age = age    def get_age(self):
        return (str(self.age) + '岁')

    def set_age(self, age):
        if not isinstance(age, int):
            raise TypeError('Type Error')
        self.age = age

tt=User(55)tt.set_age(60)print(tt.get_age())运行结果:60岁
  • #描述符尋找順序• 當為資料描述符時,get__優先權高於__dict
    當為非資料描述符時,dict__優先權高於__get

更多程式相關知識,請造訪:程式設計教學! !

以上是描述Python類別屬性的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除