python 魔術方法

2022-03-05 11:03:37 字數 2299 閱讀 3790

1. __new__方法

__new__ 和 __init__ 共同構成了類的構造方法, __new__返回這個類的例項,並將引數傳給init, init初始化這個類

# __new__ 方法實現單例模式

class

b():

__instance =none

def__new__(cls, *args, **kwargs): # 接收引數並傳遞給init,

ifnot cls.__instance

: cls.

__instance = object.__new__

(cls)

return cls.__instance

else

:

return cls.__instance

def__init__

(self, a, b):

self.a =a

self.b =b

if__name__ == '

__main__':

b = b(1, 2)

c = b(2, 4)

print

(id(b))

print(id(c))

2. __del__ 構析方法

當類的生命週期結束的時候呼叫自動呼叫該方法

class

foo():

def__init__

(self):

self.f = open('

a.js

', 'r'

)

def__del__

(self):

self.f.close()

delself.f

print('

關閉檔案控制代碼')

if__name__ == '

__main__':

foo()

3. __setattr__

使用 例項.name = value 給例項屬性賦值的時候呼叫__setattr方法

class

foo():

def__setattr__

(self, key, value):

print('

設定值{} : {}

'.format(key, value))

self.

__dict__[key] =value

if__name__ == '

__main__':

a =foo()

a.name = '

zj'

4. __iter__ 和 __next__ 方法

__iter__ 將物件變成乙個迭代器

__next__ for迴圈取值的時候觸發

class

foo():

def__init__

(self, start, end):

self.start =start

self.end =end

def__iter__

(self):

return

self

def__next__

(self):

if self.start >=self.end:

raise

stopiteration

n =self.start

self.start += 1

return

nfor i in foo(1,3):

print(i)

5. 上下文管理

with 乙個物件的時候執行物件的__enter__ 方法

with 結束的時候執行物件的 __exist__ 方法

class

foo():

def__init__

(self, file):

self.file =file

def__enter__

(self):

print('

開啟檔案')

self.f =open(self.file)

return

self.f

def__exit__

(self, exc_type, exc_val, exc_tb):

print('

關閉檔案')

self.f.close()

with foo(

'a.js

') as f:

print(f.read())

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...