Python類內部的魔術方法

2021-09-27 10:28:41 字數 2866 閱讀 9510

1. __repr__()和__str__()方法

__repr__()和__str__()方法用來響應repr()函式和str()函式。repr()函式返回字串在**中的樣子,在輸出時不會對轉義字元進行轉義,而str()返回使用者看到的樣子。你可以執行上述**看一下這兩者的區別。

print(repr("hello\nworld"))

print(str("hello\nworld"))

class a(object):

def __init__(self,name,age):

self._name=name

self._age=age

def __repr__(self):

return "{} is {} years old".format(self._name,self._age)

def __str__(self):

return "the name is {},the age is {}!".format(self._name,self._age)

a=a('nihaoa',30)

print(repr(a))

print(str(a))

print(a)

其執行結果如下:

nihaoa is 30 years old

the name is nihaoa,the age is 30!

the name is nihaoa,the age is 30!

需要注意一下幾點:

2. 比較類方法

在需要對類物件進行相等性測試或不等性測試時進行比較時用的。具體的魔術方法如下:

方法名描述

__eq__()

在兩個類物件使用==操作符進行比較時被呼叫

__ne__()

在兩個類物件使用!=操作符進行比較時被呼叫,如果沒有呼叫__ne__, python會將__eq__()的結果進行取反

__lt__()

在兩個類物件使用《操作符進行比較時被呼叫

__le__()

在兩個類物件使用<=操作符進行比較時被呼叫

__gt__()

在兩個類物件使用》操作符進行比較時被呼叫。如果未定義__gt_(),會對__le__()函式的返回值取反

__ge__()

在兩個類物件使用》=操作符進行比較時被呼叫。如果未定義__ge__(),會對__lt__()函式的返回值取反

以__eq__為例:

class a(object):

def __init__(self,age,score):

self._age=age

self._score=score

def __eq__(self,other):

return self._score==other._score

class b(object):

def __init__(self,name,age,score):

self._name=name

self._age=age

self._score=score

def __eq__(self,other):

return self._age==other._age

if __name__=='__main__':

a=a(19,500)

a_a=a(19,650)

print(a==a_a)

b=b('johh',19,600)

print(a==b)

print(b==a)

其**執行結果如下:

false

false

true

從上述實驗結果可以得出兩個結論:

3.__init__()、__new__()和__del__()方法

__new__()用於建立類的例項。例項建立完成後,會立即執行__init__()方法對其進行初始化操作。而當物件被銷毀時,則呼叫__del__()方法。

4.__int__()、__float__()和__complex__()方法

這三個方法可以將複雜物件轉化為基本資料類參與到數值計算中。__int__()響應int()函式,__float__()響應float()函式,__complex__()函式響應complex()。

class a(object):

def __init__(self,a,b):

self._int_a=a

self._float_b=b

def __int__(self):

return int(self._int_a)

def __float__(self):

return float(self._float_b)

def __complex__(self):

return complex(self._int_a,self._float_b)

a=a(5,3)

print(3+int(a))

print(3.0+float(a))

print(complex(a))

**執行結果如下:

6.0(5+3j)

注意,將類例項放到數值計算公式中式,類例項到數值的轉換不會因為設定了相應的魔術方法就能自動進行,仍然需要使用int()等方法。如果缺少int()等,將提示typeerror: unsupported operand type(s) for +: 'int' and 'a'。其他類似。

python 魔術方法

魔術方法 呼叫方式 解釋 new cls instance myclass arg1,arg2 new 在建立例項的時候被呼叫 init self instance myclass arg1,arg2 init 在建立例項的時候被呼叫 cmp self,other self other,self o...

Python魔術方法

參考文章 python 魔術方法指南 魔術方法,顧名思義是一種可以給物件 類 增加魔法的特殊方法,它們的表示方法一般是用雙下劃線包圍 如 init from os.path import join class fileobject 給檔案物件進行包裝從而確認在刪除時檔案流關閉 def init se...

Python 魔術方法

usr bin env python coding utf 8 author ray time 2018 12 6 魔術方法例項 init 建構函式,在生成物件時呼叫,用來初始化值 del 析構函式,釋放物件時使用 比如編輯檔案,把關閉檔案的操作寫在此方法中,程式結束時就會關閉軟體 str 使用pr...