內(nèi)置屬性和方法
方法名 | 類(lèi)型- | 作用 |
---|---|---|
__init__
|
方法 | 類(lèi)實(shí)例化時(shí)自動(dòng)調(diào)用這個(gè)函數(shù) |
__del__
|
方法 | 對(duì)象被內(nèi)存中銷(xiāo)毀前,會(huì)被自動(dòng)調(diào)用 |
__str__
|
方法 | 類(lèi)的實(shí)例打印時(shí)調(diào)用這個(gè)函數(shù)(返回)用戶(hù)看到的 |
__repr__
|
方法 | 和上面的str函數(shù)一樣,只是這個(gè)時(shí)返回開(kāi)發(fā)者看到的 |
__ getattr __
|
方法 | 當(dāng)調(diào)用不存在的屬性時(shí)訪(fǎng)問(wèn)這個(gè)方法 |
__call__
|
方法 | 如果類(lèi)實(shí)現(xiàn)了這個(gè)方法,相當(dāng)于把這個(gè)類(lèi)型的對(duì)象當(dāng)作函數(shù)來(lái)使用,相當(dāng)于 重載了括號(hào)運(yùn)算符 |
具體參考Python3標(biāo)準(zhǔn)庫(kù)
生命周期
-
一個(gè)對(duì)象從調(diào)用
類(lèi)名()
開(kāi)始創(chuàng)建,生命周期開(kāi)始 -
一個(gè)對(duì)象
__del__
方法一旦被調(diào)用,生命周期結(jié)束 - 在對(duì)象生命周期內(nèi)可以訪(fǎng)問(wèn),對(duì)象屬性,或者讓對(duì)象調(diào)用方法
例如:
class
Cat
:
def
__init__
(
self
,
name
)
:
self
.
name
=
name
print
(
'他來(lái)了 他來(lái)了'
)
def
__del__
(
self
)
:
print
(
'他走了 他走了'
)
# Tom 是一個(gè)全局變量
tom
=
Cat
(
'Tom'
)
print
(
tom
.
name
)
print
(
'-'
*
50
)
執(zhí)行如下
他來(lái)了 他來(lái)了
Tom
--------------------------------------------------
他走了 他走了
現(xiàn)在 我們調(diào)用 del 刪除
tom
-
-
omit
-
-
# Tom 是一個(gè)全局變量
tom
=
Cat
(
'Tom'
)
print
(
tom
.
name
)
del
tom
print
(
'-'
*
50
)
他來(lái)了 他來(lái)了
Tom
他走了 他走了
--------------------------------------------------
Class魔法方法
上面的表格以及描述的差不多了,貼一段代碼來(lái)例舉
class
Cat
:
# 類(lèi)實(shí)例化時(shí)自動(dòng)調(diào)用這個(gè)函數(shù)
def
__init__
(
self
,
name
)
:
self
.
name
=
name
print
(
'%s他來(lái)了 他來(lái)了'
%
self
.
name
)
# 對(duì)象被內(nèi)存中銷(xiāo)毀前,會(huì)被自動(dòng)調(diào)用
def
__del__
(
self
)
:
print
(
'他走了 他走了'
)
# 類(lèi)的實(shí)例打印時(shí)調(diào)用這個(gè)函數(shù)(返回)用戶(hù)看到的
def
__str__
(
self
)
:
return
'我是Cat的類(lèi)'
# 和上面的str函數(shù)一樣,只是這個(gè)時(shí)返回開(kāi)發(fā)者看到的
def
__repr__
(
self
)
:
return
'__repr__'
# 當(dāng)調(diào)用不存在的屬性時(shí)訪(fǎng)問(wèn)這個(gè)方法
def
__getattr__
(
self
,
item
)
:
item
=
'A'
print
(
'屬性不存在,默認(rèn)為 %s'
%
item
)
# 如果類(lèi)實(shí)現(xiàn)了這個(gè)方法,相當(dāng)于把這個(gè)類(lèi)型的對(duì)象當(dāng)作函數(shù)來(lái)使用,相當(dāng)于 重載了括號(hào)運(yùn)算符
def
__call__
(
self
,
*
args
,
**
kwargs
)
:
print
(
'我是 %s 通過(guò)__call__轉(zhuǎn)函數(shù)實(shí)例化的'
%
args
)
# Tom 是一個(gè)全局變量
tom
=
Cat
(
'Tom'
)
print
(
tom
.
name
)
# del tom
print
(
'-'
*
50
)
print
(
tom
)
tom
.
sex
print
(
'*'
*
50
)
tom
(
'Tim'
)
懶的同學(xué) 看下面 執(zhí)行結(jié)果
Tom他來(lái)了 他來(lái)了
Tom
--------------------------------------------------
我是Cat的類(lèi)
屬性不存在,默認(rèn)為 A
**************************************************
我是 Tim 通過(guò)__call__轉(zhuǎn)函數(shù)實(shí)例化的
他走了 他走了
__call__
如果沒(méi)有定義的話(huà) 就
tom('Tim')
就用實(shí)例直接調(diào)用類(lèi)的話(huà)會(huì)保持喲~
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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