<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一文搞懂 Python 中的類方法

          共 4449字,需瀏覽 9分鐘

           ·

          2021-01-27 14:20

          點(diǎn)擊上方AI算法與圖像處理”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)


          引言


          在上圖中可以看到一堆不同的時(shí)鐘。它們有不同的形狀、顏色和大小。然而,它們都是時(shí)鐘。我們可以用類似的方式來考慮Python中的類。一個(gè)類表示一個(gè)類型(時(shí)鐘) ,我們可以創(chuàng)建該類型的許多實(shí)例(不同的時(shí)鐘)。


          面向?qū)ο缶幊?OOP)范例是圍繞擁有屬于特定類型的對(duì)象的思想構(gòu)建的。在某種意義上,類型就是解釋我們?yōu)槭裁词菍?duì)象的原因。


          對(duì)象的解釋對(duì)于 OOP 至關(guān)重要。我們需要全面地理解:


          · 對(duì)象代表什么

          · 對(duì)象存儲(chǔ)什么樣的數(shù)據(jù)

          · 如何與對(duì)象交互

          · 如何在代碼中實(shí)現(xiàn)對(duì)象

          構(gòu)成對(duì)象解釋的所有這些點(diǎn)都是用類定義的。Python中的所有內(nèi)容都是一個(gè)類型的對(duì)象,例如整數(shù),列表,字典,函數(shù)等。我們使用類定義對(duì)象的類型。


          在本文中,我們將探討類的含義,如何在Python中創(chuàng)建和使用類以及通過使用類可以獲得哪些優(yōu)勢(shì)。


          Python中的類是什么?


          類具有以下信息:


          · 數(shù)據(jù)屬性:創(chuàng)建類實(shí)例所需的內(nèi)容

          · 方法(即過程屬性):我們?nèi)绾闻c類實(shí)例進(jìn)行交互


          我們一直在使用Python中的類。例如,當(dāng)我們創(chuàng)建一個(gè)列表時(shí),我們將創(chuàng)建一個(gè)類型為list的實(shí)例。

          words = ['data', 'science', 'machine', 'learning']

          我們實(shí)際上對(duì)列表類的創(chuàng)建方式不感興趣。我們只需要知道如何與列表交互并在我們的代碼中有效地使用它們即可。這就是抽象的概念。


          例如,我們可以使用remove方法從列表中刪除一個(gè)項(xiàng)目。

          words.remove('data')print(words)['science', 'machine', 'learning']

          創(chuàng)建一個(gè)類


          下面的代碼創(chuàng)建一個(gè)名為Book的類。

          class Book():  def __init__(self, name, writer, word_length):    self.name = name    self.writer = writer    self.word_length = word_length

          __init__是一個(gè)特殊的函數(shù),當(dāng)創(chuàng)建類的實(shí)例時(shí),該函數(shù)會(huì)自動(dòng)執(zhí)行。它也稱為類構(gòu)造函數(shù)。


          init函數(shù)的參數(shù)表示類的數(shù)據(jù)屬性。因此,如果需要為name,writer和length參數(shù)指定參數(shù)以創(chuàng)建Book實(shí)例。


          注意:self是指實(shí)例本身。可以使用任何單詞代替“self”,但是使用“self”是一種非常普遍的做法。


          讓我們創(chuàng)建一個(gè)實(shí)例。

          b1 = Book("Pandas", "John Doe", 100000)print(type(b1))'__main__.Book'>

          b1是屬于Book類的對(duì)象。我們可以使用返回對(duì)象類型的類型函數(shù)進(jìn)行確認(rèn)。


          我們可以使用以下方法訪問或修改類的屬性。

          print(b1.name)Pandasb1.name = 'NumPy' #updates the name attributeprint(b1.name)NumPy

          定義類方法


          Book類僅具有數(shù)據(jù)屬性。我們應(yīng)該添加方法(即過程屬性),使其具有實(shí)用性和功能性


          例如,我們可以實(shí)現(xiàn)一種方法,該方法返回給定fontsize的頁數(shù)。我們用字?jǐn)?shù)指定書的長度。該方法將根據(jù)長度和字體大小計(jì)算頁面數(shù)。

          def number_of_pages(self, fontsize=12):  word_length = self.word_length  if fontsize == 12:    words_in_page = 300  else:    words_in_page = 300 - (fontsize - 12) * 10  return round(word_length / words_in_page)

          我們?cè)陬惗x中添加number_of_pages。它根據(jù)單詞數(shù)和字體大小計(jì)算一本書的頁數(shù)。


          如果我們?cè)陬惗x中聲明的函數(shù)需要訪問實(shí)例的數(shù)據(jù)屬性,則需要告訴該函數(shù)如何訪問它們。這是我們?cè)趎umber_of_pages函數(shù)的第一行中所做的。


          我們可以從類或?qū)嵗L問方法。

          b1 = Book("Pandas", "John Doe", 100000)b1.number_of_pages()333Book.number_of_pages(b1)333

          number_of_pages函數(shù)具有一個(gè)附加的fontsize參數(shù)。由于指定了默認(rèn)值(12),因此我們不必顯式編寫它。但是,我們可以為fontsize參數(shù)使用不同的值。

          b1.number_of_pages(14)357b1.number_of_pages(fontsize=16)385

          隨著字體大小的增加,頁面數(shù)量也會(huì)增加。


          為了使用Python的某些內(nèi)置函數(shù),我們需要為類定義某些方法。考慮打印功能。

          print(b1)<__main__.Book object at 0x7fa4cf9f7588>

          默認(rèn)情況下,打印功能返回對(duì)象的類型和存儲(chǔ)位置。但是,我們可以通過在類中實(shí)現(xiàn)__str__方法來自定義其行為。

          def __str__(self):  return "<" + self.name + ", by " + self.writer + ">"

          如上所述,我們?cè)陬惗x中添加了_str_方法。以下是print函數(shù)現(xiàn)在在我們的類中的工作原理:

          print(b1)

          類與實(shí)例變量


          類變量在類內(nèi)部但在任何函數(shù)外部聲明。實(shí)例變量是在__init__方法的構(gòu)造函數(shù)中聲明的。


          類變量更為通用,可能會(huì)應(yīng)用類的所有實(shí)例。另一方面,實(shí)例變量更為具體,并分別為每個(gè)實(shí)例定義。在類變量和實(shí)例變量之間進(jìn)行區(qū)分非常有用。


          考慮我們之前定義的Book類。我們經(jīng)營一家出版公司,并為我們出版的書籍制定了一些標(biāo)準(zhǔn),例如封面的頁面寬度和顏色。如果將它們定義為類變量,則不必為創(chuàng)建的每個(gè)實(shí)例顯式聲明。

          class Book():  page_width = 14  cover_color = "blue"  def __init__(self, name, writer, word_length):    self.name = name    self.writer = writer    self.word_length = word_length

          我們已將page_width和cover_color實(shí)現(xiàn)為類變量,因?yàn)樗鼈兾挥陬惗x之內(nèi),但不在任何函數(shù)定義之內(nèi)。


          讓我們創(chuàng)建 Book 類的一個(gè)實(shí)例。

          b2 = Book("Machine Learning", "Jane Doe", 120000)

          在創(chuàng)建此實(shí)例時(shí),我們沒有指定類變量。然而,b2擁有這些變量,我們可以訪問它們。

          b2.page_width14b2.cover_color'blue'

          我們可以選擇更改特定實(shí)例的類變量。

          b2.cover_color = 'red'b2.cover_color'red'

          對(duì)特定實(shí)例的更改不會(huì)對(duì)類變量產(chǎn)生任何影響。

          Book.cover_color'blue'

          創(chuàng)建一個(gè)子類


          我們可以基于不同的類創(chuàng)建一個(gè)類。讓我們基于“ Book”類創(chuàng)建一個(gè)名為“ ColorBook”的類。

          class ColorBook(Book):

          ColorBook是Book類的子類。當(dāng)我們以這種方式創(chuàng)建一個(gè)類時(shí),子類從父類復(fù)制屬性(數(shù)據(jù)和過程)。這個(gè)概念稱為繼承,它使OOP更加有效和強(qiáng)大。


          它與現(xiàn)實(shí)生活中的遺傳類似。我們的基因組大部分來自我們的父母或祖先。我們從他們那里繼承。因此,我們和我們的父母有相似之處。


          除了從父類繼承的屬性之外,子類還可以有新的屬性。此外,我們還可以選擇修改或覆蓋繼承的屬性。


          讓我們定義ColorBook類的__init__函數(shù)。它將具有兩個(gè)附加參數(shù),分別是“ color”(顏色)指示頁面的顏色和“ has_image”(指示書中是否有圖像)。

          class ColorBook(Book):  def __init__(self, name, writer, word_length, color, has_image):    Book.__init__(self, name, writer, word_length    self.color = color    self.has_image = has_image

          由于name,writer和word_length已在Book類中定義,因此我們可以從中復(fù)制__init__方法。我們只需要定義其他屬性。


          注意:我們可以自由為子類手動(dòng)定義每個(gè)數(shù)據(jù)屬性。使用父節(jié)點(diǎn)的__init__是可選的。


          讓我們創(chuàng)建一個(gè)ColorBook類的實(shí)例。

          c1 = ColorBook("Seaborn", "John Doe", 90000, "green", True)c1.name"Seaborn"c1.color"green"

          子類也繼承類變量。

          c1.cover_color"blue"c1.page_width14

          這些方法也是從父類復(fù)制的。對(duì)于Book類,我們定義了兩個(gè)方法,它們也可以用于ColorBook類的實(shí)例。

          c1.number_of_pages()300print(c1)

          我們可以選擇覆蓋從父類繼承的數(shù)據(jù)和過程屬性(即方法)。這使繼承更加強(qiáng)大,因?yàn)槲覀儽仨毷褂酶割愔械乃袃?nèi)容。


          例如,我們可以為ColorBook類修改__str__方法。

          def __str__(self):  return "<" + self.name + ", in " + self.color + ">"

          Print函數(shù)將返回書的名稱和顏色。

          c1 = ColorBook("Seaborn", "John Doe", 90000, "green", True)print(c1)in green>

          下面是Book和ColorBook類的類定義。

          總結(jié)


          我們?cè)诒疚闹杏懻摰膬?nèi)容可以被認(rèn)為是對(duì) Python 類的全面介紹。我們已經(jīng)提到了類對(duì)于面向?qū)ο缶幊痰闹匾裕约邦惾绾窝菔境橄蠛屠^承等關(guān)鍵概念。


          在實(shí)際應(yīng)用方面,我們已經(jīng)定義了兩個(gè)類,并且看到了在創(chuàng)建子類時(shí)繼承是如何工作的。


          還有很多關(guān)于 Python 類的內(nèi)容。一旦你熟悉了這些基礎(chǔ)知識(shí),就可以自由地進(jìn)入更高級(jí)的話題。


          ·? END? ·


          HAPPY?LIFE


          個(gè)人微信(如果沒有備注不拉群!
          請(qǐng)注明:地區(qū)+學(xué)校/企業(yè)+研究方向+昵稱



          下載1:何愷明頂會(huì)分享


          AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):何愷明,即可下載。總共有6份PDF,涉及 ResNet、Mask RCNN等經(jīng)典工作的總結(jié)分析


          下載2:終身受益的編程指南:Google編程風(fēng)格指南


          AI算法與圖像處理」公眾號(hào)后臺(tái)回復(fù):c++,即可下載。歷經(jīng)十年考驗(yàn),最權(quán)威的編程規(guī)范!



          下載3 CVPR2020

          AI算法與圖像處公眾號(hào)后臺(tái)回復(fù):CVPR2020即可下載1467篇CVPR?2020論文


          覺得不錯(cuò)就點(diǎn)亮在看吧



          瀏覽 120
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日本一区二区三区在线视频 | 欧美亚洲日韩一区二区 | 夜色色AV | 国产三级精品在线 | wwwav在线 |