首頁 後端開發 Python教學 實例詳解python中類別的繼承

實例詳解python中類別的繼承

Apr 28, 2017 am 09:27 AM
python

這篇文章主要介紹了python類別的繼承實例詳解的相關資料,需要的朋友可以參考下

#python 類別的繼承

對於許多文章講解python類別的繼承,大多數都是說一些什麼oop,多態等概念,我認為這樣可能對有一定基礎的開發者幫助不是那麼大,不如直接用在各種情況下所寫的程式碼,來展示對於某一種程式碼情況,程式碼運行會有什麼效果。這樣可能對開發者的幫助更大。不說廢話,直接上程式碼。

這裡不區分經典類別和新式類,下面分析的對新式類別和經典類別都適用

對於類別中的__init__函數,只是一個初始化是呼叫的一個函數(ps:初始化和建立實例並不是一個過程,實例的建立是透過一個create函數來完成的),如果在子類別中沒有顯示的宣告__init__函數,則子類別就會調用父類別的__init__函數,但不會再呼叫父類別的父類別中的__init__函數,如果顯示的宣告了__init__ 函數,則在子類別的初始化的時候就不會呼叫父類別的初始化函數,只會呼叫子類別中宣告的__init__函數, 同時在子類別實例中也不會有父類別__init__函數中宣告的屬性,

範例:

class animal():
 name="hh"
 sex="man"
 def __init__(self):
  self.height=10
  self.weight=50
 def deception(self):
  print "ansible.height:"+self.height+" animal.weight:"+self.weight
 def run(self):
  print "animal is running...."
class dog(animal):
 def __init__(self):
  pass
if __name__=="__main__":
 dg=dog()
 print dg.__dict__
登入後複製

此時執行的結果為

{}

當把dog類別修改為如下時(ps:此時沒有顯示的宣告__init__方法):

class dog(animal):
 def run(self):
  print "dog is running..."
登入後複製

此時由於直接呼叫的父類animal的__init__方法,結果如下:

{'weight': 50, 'height': 10}
登入後複製

如果此時有一個類別繼承dog類,此時會出現什麼情況呢? (python解釋器先在子類別中尋找__init__方法,如果沒有找到,再從父類別中找,直到找到為止,並執行,並且不再執行父類別的父類別的__init__方法,此時沒有執行的__init__方法中的建立的屬性是沒有的,例如上面的例子,第一次執行時得到的例子中並沒有weight和height屬性)

class animal():
 name="hh"
 sex=""
 def __init__(self):
  self.height=10
  self.weight=50
 def deception(self):
  print "ansible.height:"+self.height+" animal.weight:"+self.weight
 def run(self):
  print "animal is running...."
class dog(animal):
 def __init__(self):
  pass
 def run(self):
  print "dog is running..."
class jinmao(dog):
 # def __init__(self):
 #  self.ji="jinmao"
 pass
if __name__=="__main__":
 dg=jinmao()
 print dg.__dict__
登入後複製

此時的結果一樣是

{}

在類別的多重繼承中會產生什麼狀況呢? (在多重繼承中會執行類別的繼承參數中的第一個參數宣告的父類別中的__init__函數,如果父類別中沒有__init__函數,繼續尋找父類別的父類別中有沒有,以此類推。可以根據前面例子自己測試。

對於在子類別中呼叫父類別中的方法的super的使用與特性。

總結:如果想了解python虛擬機具體是怎麼建立類別的(具體到當載入一個.pyc檔時,是怎麼透過c語言的程式碼邏輯來把類別物件放到一塊記憶體中的,我也在了解這方面的內容,希望咱們一塊探索)

以上是實例詳解python中類別的繼承的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

模板化的優點和缺點有哪些? 模板化的優點和缺點有哪些? May 08, 2024 pm 03:51 PM

模板化的優點和缺點有哪些?

Google AI 為開發者發佈 Gemini 1.5 Pro 和 Gemma 2 Google AI 為開發者發佈 Gemini 1.5 Pro 和 Gemma 2 Jul 01, 2024 am 07:22 AM

Google AI 為開發者發佈 Gemini 1.5 Pro 和 Gemma 2

怎麼下載deepseek 小米 怎麼下載deepseek 小米 Feb 19, 2025 pm 05:27 PM

怎麼下載deepseek 小米

deepseek怎麼問他 deepseek怎麼問他 Feb 19, 2025 pm 04:42 PM

deepseek怎麼問他

evaluate函數怎麼保存 evaluate函數怎麼保存 May 07, 2024 am 01:09 AM

evaluate函數怎麼保存

NET40是什麼軟體 NET40是什麼軟體 May 10, 2024 am 01:12 AM

NET40是什麼軟體

deepseek該怎麼搜索 deepseek該怎麼搜索 Feb 19, 2025 pm 05:18 PM

deepseek該怎麼搜索

瀏覽器插件是什麼語言寫的 瀏覽器插件是什麼語言寫的 May 08, 2024 pm 09:36 PM

瀏覽器插件是什麼語言寫的

See all articles