魔術(shù)方法(魔法函數(shù)):一種特殊的方法。
特點:不需要人工調(diào)用,在特定的時刻自動執(zhí)行。
1._ init _ 初始化魔術(shù)方法 *****
1.觸發(fā)時機:實例化對象之后觸發(fā)
2.作用:為實例化的對象添加對象的所屬成員。
3.參數(shù):一個self 接受當前對象 其他的參數(shù)根據(jù)實例化的傳參決定
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 _ 構(gòu)造方法 *****
1.觸發(fā)時機:實例化對象的時候觸發(fā)(在__init__之前)!
2.作用:管理控制對象的生成過程。
3.參數(shù):一個cls接受當前類,其他的參數(shù)根據(jù)實例化的參數(shù)決定
4.返回值:可有可無 沒有返回值,實例化結(jié)果為None
5.注意事項:new魔術(shù)方法跟init的魔術(shù)方法的參數(shù)一致(除了第一個)
生成對象用return object.__new__(cls)
例:
class YmPo(object):
def __new__(cls,name):
if name == "我":
return object.__new__(cls)
else:
pass
hanguo = YmPo("你") #先 生成對象,在初始化對象
print(hanguo)
單例設(shè)計模式:一個類無論實例化多少次,有且只有一個對象(使用__new__模式方法)
單例模式形成后,成員屬性不變,成員屬性的值改變
例:
class
Text
(
)
:
# 給成員屬性name賦值為None
name
=
None
# 創(chuàng)建對象
def
__new__
(
cls
,
name
)
:
# 判斷name屬性是否是None
if
cls
.
name
==
None
:
# 通過父類object 中的__new__ 魔術(shù)方法創(chuàng)建對象,存儲在當前類的成員屬性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 _ 析構(gòu)方法 ****
1.觸發(fā)時機:對象被系統(tǒng)回收的時候自動觸發(fā)[1.頁面執(zhí)行完畢回收所有變量 2.所有對象(引用)被del的時候]
2.作用:回收程序使用過程的信息和變量等
3.參數(shù):一個self接收當前對象
4.返回值:無
5.注意事項:無
例:
class Durk():
def __del__(self):
print("del被觸發(fā)了")
yazi = Durk()
name = yazi
print("======================")
del yazi
print("***********************")
del name
print("------------------------")
4._ call _
1.觸發(fā)時機:將對象當作函數(shù)調(diào)用的時候自動觸發(fā)
2.作用:常用于歸結(jié)類/對象的操作步驟,方便后期調(diào)用
3.參數(shù):一個self接受當前對象,其余的參數(shù)根據(jù)需求添加
4.返回值:可以有,可以沒有
5.注意事項:無
class Computer():
name = "電腦"
def end(self):
print("工作結(jié)束了")
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.觸發(fā)時機:使用len函數(shù)檢測對象的時候自動觸發(fā)
2.作用:使得len可以檢測對象中某個數(shù)據(jù)的信息
3.參數(shù):一個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.觸發(fā)時機:使用print打印對象的時候自動觸發(fā),使用str()轉(zhuǎn)換對象的時候也會觸發(fā)
2.作用:可以定義打印對象顯示的信息內(nèi)容
3.參數(shù):一個self接受當前對象
4.返回值:必須有,且必須是字符串類型(即顯示的對象內(nèi)容)
5.注意事項:無
例:
class Tall():
def __init__(self):
self.name = "hello"
def __str__(self):
return "這是一個實例化Tall得到的對象"
#實例化類
gao = Tall()
print(gao)
7._ repr _
1.觸發(fā)時機:在使用repr轉(zhuǎn)換對象的時候自動觸發(fā)
2.作用:可以設(shè)置repr函數(shù)操作對象的結(jié)果
3.參數(shù):一個self接受有當前對象本身
4.返回值:有必須是字符串
5.注意事項:正常情況下,類中的__str__和__repr__魔術(shù)方法是完全一樣的(字符串中的str和repr魔術(shù)方法就不一樣。)
repr():將對象轉(zhuǎn)化為供解釋器讀取的形式。
repr函數(shù)和str函數(shù)除了對字符串的處理,其他的是一致的.在類中定義魔術(shù)方法的時候想使用repr方法就得定義str魔術(shù)方法
例:
class Tall():
def __init__(self):
self.name = "hello"
def __repr__(self):
print("repr被觸發(fā)")
return "這是一個實例化Tall得到的對象"
#實例化類
gao = Tall()
# res = repr(gao)
# print(res)
8._ bool _
1.觸發(fā)時機:使用bool() 轉(zhuǎn)換對象的時候自動觸發(fā)(一般情況下,對象轉(zhuǎn)換的結(jié)果默認就是True)
2.作用: 用于控制檢測對象成員的信息
3.參數(shù):一個self接受當前對象
4.返回值:必須有且必須是布爾值
5.注意事項:無
class Tall():
def __init__(self,age):
self.name = "hello"
self.age = age
def __bool__(self):
print("bool被觸發(fā)")
if self.age == "0":
return True
else:
return False
#實例化類
gao = Tall("0")
res = bool(gao)
print(res)
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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