Python常見的特殊方法

2021-09-27 08:47:17 字數 3065 閱讀 4572

一、重寫__repr__方法(類的自我描述方法)

當列印物件時,系統會根據__repr__方法輸出物件的自我描述資訊,用來告訴外界該物件具有的狀態資訊

class rectangle:

def __init__(self, width, height):

self.width = width

self.height = height

def __repr__(self):

return '這是乙個矩形面積計算類'

c = rectangle(3, 5)

print(c) #輸出 『這是乙個矩形面積計算類』

二、析構方法__del__

方法__del__()與__init__()方法對應,在任何python物件要被系統**時,系統會自動呼叫__del__()方法,注意只有當物件的引用計數變0時,該物件才會被**。

class rectangle:

def __init__(self, width, height):

self.width = width

self.height = height

def __repr__(self):

return '這是乙個矩形面積計算類'

def __del__(self):

print('這是刪除rectangle類物件的話術')

c = rectangle(3, 5)

#x = c

del c

print('**********=')

如上例所示當注釋 x = c 時,先輸出刪除話術,再輸出』**********=』(執行del c 時可以立即**物件,呼叫__del__),如果不注釋 x = c 時,則輸出順序相反(x 變數的存在,導致del c 無法立即**物件,執行結束後**物件)

三、__dir__方法

物件的__dir__方法返回包含所有屬性方法的序列,dir(object)函式實際就是將__dir__方法的返回進行排序,幷包裝成列表

class rectangle:

def __init__(self, width, height):

self.width = width

self.height = height

def __repr__(self):

return '這是乙個矩形面積計算類'

def __del__(self):

print('這是刪除rectangle類物件的話術')

c = rectangle(3, 5)

print(c.__dir__()) #返回所有的屬性方法組成的列表

print(dir(c)) #返回所有的屬性方法排序後組成的列表

四、__dict__屬性

__dict__用於檢視物件內部所有的屬性名和值組成的字典,也可通過字典語法來訪問或修改指定屬性的值。

class rectangle:

def __init__(self, width, height):

self.width = width

self.height = height

def __repr__(self):

return '這是乙個矩形面積計算類'

def __del__(self):

print('這是刪除rectangle類物件的話術')

c = rectangle(3, 5)

print(c.__dict__) #

c.__dict__['width'] = 5

c.__dict__['height'] = 3

print(c.__dict__) #

五、屬性__getattr__、setattr__等

1、屬性__getattribute(self, name):當程式訪問物件的name屬性時才被自動呼叫;

2、屬性__getattr__(self, name):當程式訪問物件的name屬性且該屬性不存在時被自動呼叫;

3、屬性__setattr__(self, name, value):當程式對物件的name屬性賦值時被自動呼叫;

4、屬性__delattr__(self, name):當程式刪除物件的name屬性時被自動呼叫。

class rectangle:

def __init__(self, width, height):

self.width = width

self.height = height

def __repr__(self):

return '這是乙個矩形面積計算類'

def __del__(self):

print('這是刪除rectangle類物件的話術')

#重寫__setattr__方法,完成合成屬性size的賦值

def __setattr__(self, name, value):

if name == 'size' :

self.width, self.height = value

else:

self.__dict__[name] = value

#重寫__getattr__方法,完成合成屬性size值的獲取

def __getattr__(self, name):

if name == 'size':

return self.width * self.height

else:

raise attributeerror

#重寫__delattr__方法,處理合成屬性size的刪除

def __delattr__(self, name):

if name == 'size':

self.__dict__['width'] = 0

self.__dict__['height'] = 0

c = rectangle(3, 5)

print(c.size) #輸出15

del c.size

print(c.size) #輸出0

Python中的常見特殊方法 del方法

del 方法用於銷毀python物件 在任何python物件將被系統 的時候,系統都會自動呼叫這個方法。但是不要以為對乙個變數執行del操作,該變數引用的物件就會被 當然不是,如果有多個變數引用它,del其中乙個變數是不會 該物件的。栗子如下 1 coding utf 8 2class item 3...

Python中的常見特殊方法 repr方法

在python中有些方法名 屬性名的前後都新增了雙下劃線,這種方法 屬性通常都屬於python的特殊方法和特殊屬性,開發者可以通過重寫這些方法或者直接呼叫這些方法來實現特殊的功能。其實前面見過的構造方法 init 就是一種特殊方法,開發者可以通過重寫類中的 init 方法實現自己想要的初始化邏輯。p...

Python中常見的特殊方法 魔術方法介紹

class vector2d typecode d def init self,x,y self.x float x 私有變數 self.y float y property def x self 讀取,v1.x相同方式讀取 return self.x property def y self ret...