Python 5 魔法方法的使用

2021-09-11 22:25:15 字數 2595 閱讀 2693

在python 中有一些內建好的特定的方法,這些方法在進行特定的操作時會自動被呼叫,稱之為魔法方法,其特徵是左右有兩個下劃線。

1.基本的魔法方法

魔法方法

含義__new__(cls[, ...])

1. __new__ 是在乙個物件例項化的時候所呼叫的第乙個方法

2. 它的第乙個引數是這個類,其他的引數是用來直接傳遞給 __init__ 方法

3. __new__ 決定是否要使用該 __init__ 方法,因為 __new__ 可以呼叫其他類的構造方法或者直接返回別的例項物件來作為本類的例項,如果 __new__ 沒有返回例項物件,則 __init__ 不會被呼叫

4. __new__ 主要是用於繼承乙個不可變的型別比如乙個 tuple 或者 string

__init__(self[, ...])

構造器,當乙個例項被建立的時候呼叫的初始化方法

__del__(self)

析構器,當乙個例項被銷毀的時候呼叫的方法

__call__(self[, args...])

允許乙個類的例項像函式一樣被呼叫:x(a, b) 呼叫 x.__call__(a, b)

__len__(self)

定義當被 len() 呼叫時的行為

__repr__(self)

定義當被 repr() 呼叫時的行為

__str__(self)

定義當被 str() 呼叫時的行為

__bytes__(self)

定義當被 bytes() 呼叫時的行為

__hash__(self)

定義當被 len() 呼叫時的行為

__bool__(self)

定義當被 len() 呼叫時的行為

__format__(self, format_spec)

定義當被 format() 呼叫時的行為

(1) __new__

很多人認為__init__是類的建構函式,其實不太確切,__init__更多的是負責初始化操作,相當於乙個專案中的配置檔案,__new__才是真正的建構函式,建立並返回乙個例項物件,如果__new__只呼叫了一次,就會得到乙個物件。繼承自object的新式類才有__new__這一魔法方法,__new__至少必須要有乙個引數cls,代表要例項化的類,此引數在例項化時由python直譯器自動提供,__new__必須要有返回值,返回例項化出來的例項(很重要),這點在自己實現__new__時要特別注意,可以return父類__new__出來的例項,或者直接是object的__new__出來的例項,若__new__沒有正確返回當前類cls的例項,那__init__是不會被呼叫的,即使是父類的例項也不行。__new__是唯一在例項建立之前執行的方法,一般用在定義元類時使用。

建立物件的步驟:

1、首先呼叫__new__得到乙個物件

2、呼叫__init__為物件新增屬性

3、將物件賦值給變數

例項1.不使用__new__返回當前類

class

a(object)

: pass

class

b(a)

: def __init__

(self)

:print

('__init__被呼叫'

) def __new__

(cls)

:print

('__new__被呼叫'

)print(id

(cls)

)return object.

__new__

(a)b =b(

)print

(b)print

(type

(b))

output:

__new__被呼叫

2530157441880

<__main__.a object at 0x0000024d16af6320>

例項1.使用__new__返回當前類

class

a(object)

: pass

class

b(a)

: def __init__

(self)

:print

('__init__被呼叫'

) def __new__

(cls)

:print

('__new__被呼叫'

)print(id

(cls)

)return object.

__new__

(b)b =b(

)print

(b)print

(type

(b))

output:

__new__被呼叫

2261354513416

__init__被呼叫

<__main__.b object at 0x0000020e826e63c8>

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

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

python的魔法 Python 魔法方法

先給個例子 class frenchdeck ranks str n for n in range 2,11 list jqka suits spades diamonds clubs hearts split def init self self.cards card rank,suit for ...

python 魔法方法

魔法方法具有一定的特徵 new cls class capstr str def new cls,string 修改新類裡的new方法,需傳入乙個引數 string string.upper return str.new cls,string 用父類裡的new方法進行返回,直接飯後構造後的物件def...