描述Python類別屬性

coldplay.xixi
發布: 2021-01-08 14:13:54
轉載
1797 人瀏覽過

描述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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板