class
people
:def
__init__
(self,name)
: self.__name=name
@property
defname
(self)
:return self.__name
@name.setter
defname
(self,value)
: self.__name=value
__getattr__是在找不到屬性的時候會進入到該魔法方法
__getattribute__是需要尋找屬性的時候先進入該魔法方法
屬性描述符:
1、資料屬性描述符
__get__、__set__、__delete__
2、非資料屬性描述符
__get__
屬性查詢過程
有乙個user類、查詢例項user.age
1、呼叫__getattribute__
2、__get__發生在__getattribute__中
3、如果age在類中或者類的基類中,且age是資料描述符、優先呼叫資料描述符的__get__
4、age在例項的__ dict__中,直接返回user.__dict__['age']
5、age在類中或者基類的__dict__中
5.1、age是非資料描述符、呼叫非資料描述符的__get__
5.2、返回user.__dict__['age']
6、__getattribute__丟擲attributeerror,進入__getattr__
__new__建立例項
__init__完善例項
建立類的類叫做元類、type就是元類
python 元類程式設計
裝飾器任何時候你定義裝飾器的時候,都應該使用 functools 庫中的 wraps 裝飾器來註解底層包裝函式.因為乙個普通裝飾器作用在某個函式上時,這個函式的重要的元資訊比如名字 文件字串 註解和引數簽名都會丟失。但是 wraps不會。import time from functools impo...
python 元類程式設計
getattr 方法可用來檢查乙個類中是否有乙個屬性,比如 class user def init self,name self.name name def getattr self,item print not find attr def main user user dog user.age i...
python元類程式設計
當我們希望動態的產生類的時候,就需要用到元類程式設計的手段。要掌握此技術,需要明白以下幾個基本內容 metaclass type new call 在python 中,所有東西都是物件 object 包括python的類 class 也是乙個物件。檢視乙個物件的類,可以用物件的 class 屬性 c...