Python最全面向?qū)ο箝_發(fā)-類的基礎(chǔ)

對于我們來講并不陌生峭范,很多語言都有類财松,比如OC、JS纱控、Java等辆毡,所有Python也自然有類的概念。

一甜害、Python中類的定義

Python中有兩種類(新式類與經(jīng)典類)舶掖,兩種類的比較,此文主要討論新式類

Python類 版本 特點(diǎn) 多繼承特點(diǎn) 方法對比
經(jīng)典類 Python2.x 隱式不繼承object尔店,顯示繼承object 是新式類 采用廣度優(yōu)先搜索 -
新式類 Python3.x 隱式繼承object 深度優(yōu)先搜索 新增 ___slots____ ____getattribute____ 內(nèi)置屬性

相同點(diǎn):\color{red}{類名首字母需要大寫}

1.1 限制類的屬性 ____slots____ 是一個(gè)屬性限制列表

 class Person:
        __slots__ = ['age', 'height']
  p = Person()
  p.age = 10
  p.height = 4

二眨攘、Python中類的屬性

聲明:Python里面并沒有真正的私有化主慰,但是可以使用下劃線(_)來完成偽私有化
x 公有屬性
_x(單下劃線) 受保護(hù)屬性
__x(雙下劃線) 私有屬性
xx
(下劃線) 與系統(tǒng)的關(guān)鍵字區(qū)別
____xx____ 系統(tǒng)內(nèi)置的寫法

2.1受保護(hù)屬性的訪問限制

類的內(nèi)部 子類的內(nèi)部 可以訪問 模塊內(nèi) 跨模塊 有警告 跨模塊可以使用all字段申明可以跨模塊使用的屬性

2.2 私有屬性的訪問限制

只有在當(dāng)前類被訪問 ,不能被子類 模塊內(nèi)訪問 跨模塊訪問的規(guī)則和受保護(hù)屬性規(guī)則一致

2.3 @property 裝飾器 可以使用屬性的方式訪問屬性

class Person(object):
    def __init__(self):
        self.__age = 24
        self.__weight = 140

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, value):
        self.__age = value

    @age.deleter
    def age(self):
        del self.__age

    @property
    def weight(self):
        return self.__weight
    p = Person()
    p.age = 20
    print(p.age)
    print(p.weight)
    print(p.__dict__)

2.4 常用的系統(tǒng)內(nèi)置屬性

__dict__ 查看屬性
__bases__ 查看所有父類的元類
__doc__ 查看類的描述
__name__ 查看類的名稱
__module__ 查看類定義所在的模塊

三鲫售、Python中類的方法

Python類中的方法有三種

  • A共螺、類方法 (第一個(gè)參數(shù)是類)
  • B、實(shí)例方法(第一個(gè)參數(shù)是實(shí)例)
  • C情竹、靜態(tài)方法(沒有參數(shù))

類中的方法說明

class Person:
      # 這是一個(gè)實(shí)例方法藐不,第一個(gè)參數(shù)必須接收一個(gè)實(shí)例 ,只有實(shí)例調(diào)用
      def test(self):
            print('這是一個(gè)實(shí)例方法,第一個(gè)參數(shù)必須接收一個(gè)實(shí)例', self)

      # 這是一個(gè)類方法秦效,第一個(gè)參數(shù)必須接收一個(gè)類 實(shí)例和類都可以調(diào)用
      @classmethod
      def leifangfa(cls):
            print('這是一個(gè)類方法雏蛮,第一個(gè)參數(shù)必須接收一個(gè)類', cls)

        # 這是一個(gè)靜態(tài)方法,沒有參數(shù)  實(shí)例和類都可以調(diào)用
      @staticmethod
      def jintafanfa():
              print('這是一個(gè)靜態(tài)方法阱州,沒有參數(shù)')

注意:不同方法里面訪問不同屬性的權(quán)限問題 方法里面能拿到實(shí)例就只能訪問實(shí)例屬性 方法里面能拿到類挑秉,就能拿到類屬性

3.1 私有化方法 與 私有化屬性一樣 都是加_(下劃線)

class Person(object):
    # 私有屬性
    __age = 10

    # 私有方法 _Person__run()
    def __run(self):
        print('xxxxxxx')

    # 覆蓋了__run方法  不能這么定義
    def _Person__run(self):
        print('ddd')

3.2 類常用的的內(nèi)置方法
A. 信息格式化操作

# 打印對象的內(nèi)容 - 描述對象
def __str__(self):
   return '這個(gè)人的姓名是:%s, 這是人的年齡是:%s'%(self.name, self.age)

# 取實(shí)例對象的本質(zhì)信息:面向開發(fā)者人員
def __repr__(self):
      return '獲取實(shí)例對象的本質(zhì)信息'

#調(diào)用操作__call__ 使一個(gè)對象具有函數(shù) 被調(diào)用的能力 可以通過p()調(diào)用
def __call__(self, *args, **kwargs):
    print('xxxxx', args, kwargs)

B.索引操作:把對象當(dāng)做字典來操作

class Person(object):

  def __init__(self):
      self.cache = {}

  def __setitem__(self, key, value):
      print('__setitem__ ---key:%s --value : %s'%(key, value))
      self.cache[key] = value

  def __getitem__(self, item):
       print('__getitem__ ---item:%s '%item)
      return self.cache[key]

  def __delitem__(self, key):
      print('__delitem__ ---key:', key)
      del self.cache[key]
p = Person()
p['name'] = 'zb'
print(p.__dict__)
print(p.cache['name'])

C.類的裝飾器

class checkName(object):

  def __init__(self, func):
      self.func = func

  def __call__(self, *args, **kwargs):
      print('類的裝飾器的檢測')
      self.func()

@checkName
def fashuoshuo():
     print('發(fā)說說。贡耽。衷模。。蒲赂。')

// 調(diào)用
 fashuoshuo()

最后贈言

學(xué)無止境阱冶,學(xué)習(xí)Python的伙伴可以多多交流。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末滥嘴,一起剝皮案震驚了整個(gè)濱河市木蹬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌若皱,老刑警劉巖镊叁,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異走触,居然都是意外死亡晦譬,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進(jìn)店門互广,熙熙樓的掌柜王于貴愁眉苦臉地迎上來敛腌,“玉大人,你說我怎么就攤上這事惫皱∠穹” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵旅敷,是天一觀的道長生棍。 經(jīng)常有香客問我,道長媳谁,這世上最難降的妖魔是什么涂滴? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任友酱,我火速辦了婚禮,結(jié)果婚禮上氢妈,老公的妹妹穿的比我還像新娘粹污。我一直安慰自己段多,他們只是感情好首量,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著进苍,像睡著了一般加缘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上觉啊,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天拣宏,我揣著相機(jī)與錄音,去河邊找鬼杠人。 笑死勋乾,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的嗡善。 我是一名探鬼主播辑莫,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼罩引!你這毒婦竟也來了各吨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤袁铐,失蹤者是張志新(化名)和其女友劉穎揭蜒,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體剔桨,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡屉更,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了洒缀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瑰谜。...
    茶點(diǎn)故事閱讀 40,040評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖帝洪,靈堂內(nèi)的尸體忽然破棺而出似舵,到底是詐尸還是另有隱情,我是刑警寧澤葱峡,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布砚哗,位于F島的核電站,受9級特大地震影響砰奕,放射性物質(zhì)發(fā)生泄漏蛛芥。R本人自食惡果不足惜提鸟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望仅淑。 院中可真熱鬧称勋,春花似錦、人聲如沸涯竟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽庐船。三九已至银酬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間筐钟,已是汗流浹背揩瞪。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留篓冲,地道東北人李破。 一個(gè)月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像壹将,于是被迫代替她去往敵國和親嗤攻。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容