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)
(id(b))
print(id(c))
2. __del__ 構析方法
當類的生命週期結束的時候呼叫自動呼叫該方法
classfoo():
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方法
classfoo():
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迴圈取值的時候觸發
classfoo():
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__ 方法
classfoo():
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...