20.類的屬性及方法

class Cat(object):
     #靜態(tài)屬性,類的屬性
   age="年后"
   def __init__(self,name):
       #實(shí)例屬性
         self.name=name

注意點(diǎn)
ps:與JS不一樣的是,在python中靜態(tài)屬性也可以被實(shí)例化調(diào)用,但是前提是在實(shí)例屬性中沒(méi)有與靜態(tài)屬性相同的變量名稱
總結(jié)規(guī)則如下:
直接在類外賦給在類中未定義/定義的變量,那么如果是類名.變量名=value,則生成/改變的是靜態(tài)屬性,如果是實(shí)例對(duì)象名.變量名=value,那么生成/改變的是實(shí)例屬性
對(duì)于實(shí)例對(duì)象來(lái)說(shuō),調(diào)用直接的實(shí)例屬性,優(yōu)先于同名的靜態(tài)屬性
self.__age代表是私有變量

(ps:摘抄)
默認(rèn)情況下,Python中的成員函數(shù)和成員變量都是公開的(public)
在python中定義私有變量只需要在變量名或函數(shù)名前加上 ”__“兩個(gè)下劃線,那么這個(gè)函數(shù)或變量就是私有的了。
在內(nèi)部,python使用一種 name mangling 技術(shù),將 __membername替換成 _classname__membername,也就是說(shuō),類的內(nèi)部定義中,
所有以雙下劃線開始的名字都被"翻譯"成前面加上單下劃線和類名的形式。
例如:為了保證不能在class之外訪問(wèn)私有變量,Python會(huì)在類的內(nèi)部自動(dòng)的把我們定義的__spam私有變量的名字替換成為
_classname__spam(注意,classname前面是一個(gè)下劃線,spam前是兩個(gè)下劃線),因此,用戶在外部訪問(wèn)__spam的時(shí)候就會(huì)
提示找不到相應(yīng)的變量。   python中的私有變量和私有方法仍然是可以訪問(wèn)的;訪問(wèn)方法如下:
私有變量:實(shí)例._類名__變量名
私有方法:實(shí)例._類名__方法名()

其實(shí),Python并沒(méi)有真正的私有化支持,但可用下劃線得到偽私有。   盡量避免定義以下劃線開頭的變量!
(1)_xxx      "單下劃線 " 開始的成員變量叫做保護(hù)變量,意思是只有類實(shí)例和子類實(shí)例能訪問(wèn)到這些變量,
需通過(guò)類提供的接口進(jìn)行訪問(wèn);不能用'from module import *'導(dǎo)入
(2)__xxx    類中的私有變量/方法名 (Python的函數(shù)也是對(duì)象,所以成員方法稱為成員變量也行得通。),
" 雙下劃線 " 開始的是私有成員,意思是只有類對(duì)象自己能訪問(wèn),連子類對(duì)象也不能訪問(wèn)到這個(gè)數(shù)據(jù)。
(3)__xxx__ 系統(tǒng)定義名字,前后均有一個(gè)“雙下劃線” 代表python里特殊方法專用的標(biāo)識(shí),如 __init__()代表類的構(gòu)造函數(shù)。

判斷對(duì)象所屬類

print(isinstance(cat1,Cat))#如果是Cat類的實(shí)例對(duì)象則返回True,否則返回False

類的繼承:python中類的繼承會(huì)繼承構(gòu)造函數(shù)
多重繼承中,如果有重名的方法,那么按照繼承的先后順序,只調(diào)用排在前面的那一個(gè)方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容