OOP中的常用魔法方法

2022-03-18 16:47:14 字數 1947 閱讀 3130

前言:魔法方法之所以叫做是魔法方法就是應為它們不需要人為的呼叫,而是在特定時刻會自動觸發,魔法方法的方法名都有乙個特點——前後都被雙下劃線包裹,因此又有人稱之為雙下方法

操作類屬性操作相關

點攔截方法

攔截方法

點攔截方法與攔截方法示例

class person:

def __init__(self,name):

self.name=name

def __setitem__(self, key, value):

setattr(self,key,value) #反射

def __getitem__(self, item):

return getattr(self,item) # 反射取值

p=person('daker')

p.name='pp' # 重寫__setattr__魔法方法

p['name']=10 # 重寫__setitem__魔法方法

print(p.name) # 重寫__getattr__魔法方法

print(p['name'])# 重寫__getitem__魔法方法

dic=

class mydic(dict):

def __init__(self, name, age):

self.name = name

self.age = age

def __setattr__(self, key, value):

print("物件點屬性賦值,會觸發我")

self[key]=value

def __getattr__(self, item):

print("物件點屬性取值,會觸發我")

return self[item] # 不要加引號

mydic=mydic(**dic)

print(mydic['name'])

print(mydic.name)

mydic.name=99

print(mydic.name)

with上下文管理器

示例

class person:

def __enter__(self):

print("我在with管理的時候,會觸發")

print('進入with語句塊時執行此方法,此方法如果有返回值會賦值給as宣告的變數')

return 'oo'

def __exit__(self, exc_type, exc_val, exc_tb):

print('退出with**塊時執行此方法')

print('1', exc_type)

print('2', exc_val)

print('3', exc_tb)

with person() as p: # 這句話執行,會觸發類的__enter__

print(p)

__eq__:當物件執行時會觸發,會將後面的物件作為引數傳入

示例

class a:

def __init__(self,x,y):

self.x = x

self.y = y

def __eq__(self,obj):

# 列印出比較的第二個物件的x值

print(obj.x)

if self.x +self.y == obj.x+obj.y:

return true

else:

return false

a=a(1,2)

b=a(99,3)

print(a==b) # 當物件執行==時,會觸發__eq__的執行,並且把b傳進去,就是object

# ==後只要是物件,就可以傳進去,就是object

python 魔法方法 python常用魔法方法

in 1 其實 str 相當於是str 方法 而 repr 相當於repr 方法。str是針對於讓人更好理解的字串格式化,而repr是讓機器更好理解的字串格式化。class test def init self,word self.word word def str self return my n...

Python魔法方法 基本的魔法方法

new cls 1.new 是在乙個物件例項化時候所呼叫的第乙個方法 2.他的第乙個引數是這個類,其他的引數是用來直接傳遞給 init 方法 3.new 決定是否使用該 init 方法,因為.new 可以直接呼叫其他類的構造方法,或者返回別的例項物件來作為本類的例項,如果 new 沒有返回例項物件,...

python中的魔法方法

python中以 包圍的都有特殊的意思,其中是方法的都是魔法方法。python中的魔法方法魔法的地方就是你不需要顯示的呼叫,就可以實現自動呼叫。比如,init 方法,你建立乙個物件的時候,你不需要呼叫這個方法,它就會自動呼叫這個方法了。豈不是很魔法 另外,python中還有其他的魔法方法。比如講,關...