魔術方法(魔法函數):一種特殊的方法。
特點:不需要人工調用,在特定的時刻自動執行。
1._ init _ 初始化魔術方法 *****
1.觸發時機:實例化對象之后觸發
2.作用:為實例化的對象添加對象的所屬成員。
3.參數:一個self 接受當前對象 其他的參數根據實例化的傳參決定
4.返回值:無
5.注意事項:無
例:
class Name():
age = 18
def __init__(self,head):
self.sex = "男"
self.color = "black"
self.runs = self.run
print(head)
def run(self):
print("黑人跑的快")
name = Name("hair") #制作一個對象,對象初始化
print(name.__dict__)
name.runs()
2._ new _ 構造方法 *****
1.觸發時機:實例化對象的時候觸發(在__init__之前)!
2.作用:管理控制對象的生成過程。
3.參數:一個cls接受當前類,其他的參數根據實例化的參數決定
4.返回值:可有可無 沒有返回值,實例化結果為None
5.注意事項:new魔術方法跟init的魔術方法的參數一致(除了第一個)
生成對象用return object.__new__(cls)
例:
class YmPo(object):
def __new__(cls,name):
if name == "我":
return object.__new__(cls)
else:
pass
hanguo = YmPo("你") #先 生成對象,在初始化對象
print(hanguo)
單例設計模式:一個類無論實例化多少次,有且只有一個對象(使用__new__模式方法)
單例模式形成后,成員屬性不變,成員屬性的值改變
例:
class
Text
(
)
:
# 給成員屬性name賦值為None
name
=
None
# 創建對象
def
__new__
(
cls
,
name
)
:
# 判斷name屬性是否是None
if
cls
.
name
==
None
:
# 通過父類object 中的__new__ 魔術方法創建對象,存儲在當前類的成員屬性name當中
cls
.
name
=
object
.
__new__
(
cls
)
#此處一定要用name接收返回值
# 把該類對象進行返回
return
cls
.
name
def
__init__
(
self
,
names
)
:
self
.
mingzi
=
names
obj1
=
Text
(
"你好"
)
obj2
=
Text
(
"世界"
)
print
(
obj1
.
mingzi
)
print
(
obj2
.
mingzi
)
3._ del _ 析構方法 ****
1.觸發時機:對象被系統回收的時候自動觸發[1.頁面執行完畢回收所有變量 2.所有對象(引用)被del的時候]
2.作用:回收程序使用過程的信息和變量等
3.參數:一個self接收當前對象
4.返回值:無
5.注意事項:無
例:
class Durk():
def __del__(self):
print("del被觸發了")
yazi = Durk()
name = yazi
print("======================")
del yazi
print("***********************")
del name
print("------------------------")
4._ call _
1.觸發時機:將對象當作函數調用的時候自動觸發
2.作用:常用于歸結類/對象的操作步驟,方便后期調用
3.參數:一個self接受當前對象,其余的參數根據需求添加
4.返回值:可以有,可以沒有
5.注意事項:無
class Computer():
name = "電腦"
def end(self):
print("工作結束了")
def __call__(self,sex):
print(sex)
self.run()
self.end()
return "打完收工"
def run(self):
print("開始工作啦")
#實例化
huipu = Computer()
res = huipu("此電腦年齡為2年")
# print(res)
5._ len _
1.觸發時機:使用len函數檢測對象的時候自動觸發
2.作用:使得len可以檢測對象中某個數據的信息
3.參數:一個self接受當前對象
4.返回值:必須有,必須是整型(返回值就是檢測的值)
5.注意事項:len檢測什么由程序員自己決定
例:
class Tall():
def __init__(self):
self.name = "hello"
def __len__(self):
res = len(self.name)
return res
#實例化類
gao = Tall()
res = len(gao)
print(res)
6._ str _
1.觸發時機:使用print打印對象的時候自動觸發,使用str()轉換對象的時候也會觸發
2.作用:可以定義打印對象顯示的信息內容
3.參數:一個self接受當前對象
4.返回值:必須有,且必須是字符串類型(即顯示的對象內容)
5.注意事項:無
例:
class Tall():
def __init__(self):
self.name = "hello"
def __str__(self):
return "這是一個實例化Tall得到的對象"
#實例化類
gao = Tall()
print(gao)
7._ repr _
1.觸發時機:在使用repr轉換對象的時候自動觸發
2.作用:可以設置repr函數操作對象的結果
3.參數:一個self接受有當前對象本身
4.返回值:有必須是字符串
5.注意事項:正常情況下,類中的__str__和__repr__魔術方法是完全一樣的(字符串中的str和repr魔術方法就不一樣。)
repr():將對象轉化為供解釋器讀取的形式。
repr函數和str函數除了對字符串的處理,其他的是一致的.在類中定義魔術方法的時候想使用repr方法就得定義str魔術方法
例:
class Tall():
def __init__(self):
self.name = "hello"
def __repr__(self):
print("repr被觸發")
return "這是一個實例化Tall得到的對象"
#實例化類
gao = Tall()
# res = repr(gao)
# print(res)
8._ bool _
1.觸發時機:使用bool() 轉換對象的時候自動觸發(一般情況下,對象轉換的結果默認就是True)
2.作用: 用于控制檢測對象成員的信息
3.參數:一個self接受當前對象
4.返回值:必須有且必須是布爾值
5.注意事項:無
class Tall():
def __init__(self,age):
self.name = "hello"
self.age = age
def __bool__(self):
print("bool被觸發")
if self.age == "0":
return True
else:
return False
#實例化類
gao = Tall("0")
res = bool(gao)
print(res)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
