類的內建方法(魔法方法)

2022-07-24 09:12:09 字數 3152 閱讀 7745

凡是在類內部定義,以__ 開頭__ 結尾的方法都是類的的內建方法,也稱為魔法方法

類的內建方法,會在某種條件滿足下自動觸發

在呼叫類時自動觸發

在 __ init __ 觸發前自動觸發,呼叫該類是,內部會通過__ new __ 產生乙個新的物件

class demo:

# 在__init__觸發前自動觸發

def __new__(cls, *args, **kwargs):

print('__new__執行')

# 內部會通過object產生乙個新物件返回來觸發__init__,如果此處未返回新物件,則不會觸發__init__

return object.__new__(cls, *args, **kwargs)

def __init__(self):

print('__init__執行')

obj = demo()

# __new__執行

# __init__執行

在通過 「 物件 . 屬性 」 獲取物件屬性時,若沒有該屬性時觸發

class demo:

# 在通過 「 物件.屬性 」 獲取物件屬性時,若沒有該屬性時觸發

def __getattr__(self, item):

print('__getattr__執行')

print(item)

# 沒有時預設返回none,可以設定預設返回值

return '設定的預設返回值'

obj = demo()

print(obj.x)

# __getattr__執行

# x# 設定的預設返回值

在通過 「 物件.屬性 」 獲取物件屬性時,不管沒有該屬性,都會觸發

注意:當 __ getattr __ 和 __ getattribute __ 同時存在在類內部時,只會觸發 __ getattribute __

class demo:

def __getattribute__(self, item):

print('__getattribute__執行')

print(item)

# 不管有沒有都是預設返回none,可以設定預設返回值

return '設定的預設返回值'

# 此處無法獲取查詢的屬性值,不能通過物件.屬性來查詢屬性值否則會造成遞迴導致程式崩潰

# return self.__dict__[item]

# return getattr(self, item)

obj = demo()

obj.x = 10

print(obj.x)

# __getattribute__執行

# x# 設定的預設返回值

當使用 「 物件 . 屬性 = 屬性值」 時,新增或修改屬性值時觸發

class demo:

# 當使用 物件. 屬性 = 屬性值 時觸發

def __setattr__(self, key, value):

print('__setattr__執行')

print(key,value)

#需要將新增或修改的屬性加到物件命名空間中

self.__dict__[key] = value

obj = demo()

print(obj.__dict__) # {}

obj.x = 10 # __setattr__執行/ x 10

print(obj.__dict__) #

在呼叫物件,「 物件()」時觸發

class demo:

# 使用物件()呼叫物件時觸發

def __call__(self, *args, **kwargs):

print('__call__執行')

# 預設返回none,可以設定預設返回值

return '設定預設值'

obj = demo()

print(obj())

# __call__執行

# 設定預設值

在列印物件時觸發,必要要有乙個 「 字串 」 返回值

class demo:

def __str__(self):

print('__str__執行')

# 必須要有乙個字串返回值

return '字串'

obj = demo()

print(obj)

# __str__執行

# 字串

在通過「 物件[key]」 來獲取屬性值時觸發

class demo:

def __getitem__(self, item):

print('__getitem__執行')

print(item)

# 查詢到value的值並返回,沒有會報錯,不寫此步不管有沒有都會返回none

return self.__dict__[item]

obj = demo()

obj.x = 10

print(obj['x'])

# __getitem__執行

# x# 10

在通過 「 物件[key] = value 」設定屬性時觸發

class demo:

def __setitem__(self, key, value):

print('__setitem__方法執行')

print(key, value)

# 需要將新增或修改的屬性加到物件命名空間中

self.__dict__[key] = value

obj = demo()

print(obj.__dict__) #{}

obj['x'] = 10

# __getitem__執行

# x 10

print(obj.__dict__) #

Python 類內建魔法方法

一 str 方法 python class 內建函式有很多,想到了先記下來.str str 方法和 init 方法類似,都是一些特殊方法,都會自動執行的,init 是初始化的作用,str 則是用來返回物件的字串表示式。在我們編寫乙個新的python類的時候,總是在最開始位置寫乙個初始化方法 init...

Python的魔術方法(魔法方法)(二)

本篇介紹運算相關,算術運算子和型別轉換的相關魔法方法。class person def init self,name,age self.name name self.age age per1 person 豬八戒 18 per2 person 豬八戒 18 per3 person 孫悟空 20 以上...

Php5中類的保留方法 「魔法方法」

php5中類的保留方法 魔法方法列表如下 1,contruct 建立類的乙個新例項時呼叫 2,destory 類的乙個例項從記憶體中刪除時呼叫,呼叫unset 撤銷例項或指令碼執行結束時呼叫 3,autoload 第一次引用乙個類時呼叫 例如,呼叫類建構函式,呼叫類的某個靜態方法,等等 4,clon...