Python高階程式設計 元類程式設計

2021-10-10 15:04:05 字數 976 閱讀 5137

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...