1. 程式人生 > >面向物件:理解 Python 類的單繼承與多繼承

面向物件:理解 Python 類的單繼承與多繼承

每種動物都有各自的特性,比如

老鼠會打洞

貓會爬樹

鯊魚會游泳

不同種類有不同的天性。而在程式設計師的思維中, 動物是物件, 天性是這個類方法或者屬性。

再延伸一下,比如Python是面向物件程式語言。有List、Str、Dict、Tuple等資料型別,這些資料型別也是物件,比如List類可以有count方法,我們可以通過count方法統計列表中各個元素的數量。

我們可以簡單的將定義類理解成就是定義資料結構,同時給這種資料結構制定一些獨特的屬性或者方法。我們先看最簡單的類,在這裡我們定義了Point類

#為了顯示多個呼叫的變數      免費視訊資料分享 QQ群  519970686
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity = 'all'

class Point(object):
    def __init__(self, x=0, y=0):
        self.x = x
        self.y = y

    def String(self):
        #顯示Point的資訊
        return "{X:" +  str(self.x) + ", Y:" + str(self.y) + "}"

呼叫類之前我們要例項化,這個可以理解成神筆馬良畫的畫,如果不將其搞活,永遠是畫。通過例項化,呼叫例項,畫中物件就活了。

#例項化Point類
point = Point(x=3, y=4)

#顯示point物件
point 

#顯示point的String方法
point.String() 

程式碼執行結果

<__main__.Point at 0x10d98ec18>

'{X:3, Y:4}'

單繼承        

白馬和黑馬,都是馬。    

既然都是馬,所以不論黑馬白馬都有馬的特性,都可以奔跑。

所以我們可以定義一個基本的"馬類",之後讓"白馬類"和"黑馬類"繼承自"馬類"

像 白馬 和 黑馬 繼承  ,這就是單繼承。因為只是繼承了 一個 基類 。現在我們定義一個Circle類, 圓是由圓心和半徑決定的,所以Circle會繼承並使用Point的一些特性。

class Circle(Point):

    def __init__(self, x=0, y=0, radius=0):
        #Circle繼承並使用Point的__init__函式
        Point.__init__(self, x, y) 

         #不同於Point的引數radius
        self.radius = radius      


    def String(self):
        #顯示Circle的資訊
        return Point.String(self) + ", {Radius:" + str(self.radius) + "}"

現在我們看看Circle

#例項化Circle類
circle = Circle(x=3, y=2, radius=5)

#顯示circle物件資訊
circle

#顯示circle的String方法
circle.String()

程式碼執行結果

<__main__.Circle at 0x10d911c18>

'{X:3, Y:2}, {Radius:5}'

多繼承

多繼承,顧名思義就是某個類繼承了多個父類(基類)

class Size(object):

    def __init__(self, width, height):
        self.width = width
        self.height = height

    def String(self):
        return "{Width: " + str(self.width) + ", Height: " + str(self.height) + "}"
繼續

#例項化Size物件
size = Size(width=5, height=3)

size
size.String()
執行結果

<__main__.Size at 0x10d97e828>

'{Width: 5, Height: 3}'

現在已經有了Point、Size類,以及每個類中的String()方法。現在想構建 正四方形Rectangle類。為了讓Rectangle具有Point和Size的一些特性,需要讓Rectangle繼承Point和Size的一些特有的方法。

class Rectangle(Point, Size):

    def __init__(self, x, y, width, height):

        #讓Rectangle使用Point中的init方法,使得Rectangle本身含有x和y屬性值
        Point.__init__(self, x, y)
        #讓Rectangle使用Size中的init方法,使得Size本身含有width和height屬性值
        Size.__init__(self, width, height)

    def String(self):
        return "Rectangle's init point is " + Point.String(self) + "; Size is " + Size.String(self)

Rectangle 繼承了 Point 和 Size 兩個類,使得Rectangle不用定義 x、y、width、height 。而且 Rectangle的String方法 可以直接呼叫 Point和Size物件的String方法 。

#例項化Rectangle
rect = Rectangle(x=0, 
                 y=0, 
                 width=5, 
                 height=3)

#呼叫rect
rect

#顯示其方法
rect.String()

執行結果

<__main__.Rectangle at 0x10d978390>

"Rectangle's init point is {X:0, Y:0}; Size is {Width: 5, Height: 3}"

相關推薦

面向物件理解 Python 繼承繼承

每種動物都有各自的特性,比如 老鼠會打洞 貓會爬樹 鯊魚會游泳 不同種類有不同的天性。而在程式設計師的思維中, 動物是物件, 天性是這個類方法或者屬性。 再延伸一下,比如Python是面向物件程式語言。有List、Str、Dict、Tuple等資料型別,這些

[瘋狂Java]面向物件不可變

1. final只是保證被修飾的變數的值不可變!     1) 注意!保證的是值不可變,什麼是值?對於一個引用來說,就是指標咯,即指標的值不變,即其指向不變,但是我還是可以通過這個指標來呼叫可以改變該物件成員的方法啊!!     2) 即final如果修飾引用變數,只能保證

python繼承繼承

1、類與物件裡的父類與子類(繼承): 類的繼承主要是指自子類對於之前父類的方法的繼承,如果子類裡面寫了父類裡的方法,則它會將父類裡的方法覆蓋掉,從而不能再呼叫到父類的方法。 2、為了解決父類與子類裡的同方法覆蓋問題,可以有以下兩種方法: (1)呼叫未繫結的父類方法: 在同方法下面新增: 父類名稱._

c++繼承繼承(包含虛擬函式繼承的對比)

先來個概念分析題: class Person { public: void Show() { cout<<"Person::"<<_name&l

繼承繼承中的虛擬函式表和虛擬函式指標

首先,我們瞭解一下何為單繼承,何為多繼承??單繼承:一個子類只有一個直接父類。多繼承:一個子類有兩個或多個直接父類。單繼承中的虛擬函式表分析:示例程式:#include <iostream> using namespace std; typedef void(*

Python繼承繼承

Python同樣支援類的繼承,如果一種語言不支援繼承,類就沒有什麼意義 class A(): #這是父親類 def hello(self): print("我是父類") class B(A): #這是兒子類,繼承了父親的性格 def

python學習筆記】Python面向物件理解(封裝,繼承型)

說明 提到面向物件,總是離不開幾個重要的術語:多型(Polymorphism),繼承(Inheritance)和封裝(Encapsulation)。Python也是一種支援OOP的動態語言,本文將簡單闡述Python對面向物件的支援。 在討論Python的O

03.面向物件的封裝——public和private

面向物件:把構成問題的事物,按照一定規則劃分為多個獨立的物件,然後通過呼叫物件的方法來解決問題。——《Java基礎案例教程》 面向物件的特點: 封裝:封裝屬性和行為 繼承:無需在重新編寫原有類的情況下,對原有類的功能進行擴充套件——增強程式碼複用,提高開發效率 多型:允許重

Python面向物件簡單理解

多型:同一種行為(方法)具有不同的表現形式。     一個類(生物)中的不同物件擁有相同的屬性(物種名、食物)和相同的方法(吃),但建立不同物件(A、B)時設定的屬性引數不同(A物種名:狼、食物:肉;B物種名:馬、食物:草),傳遞到同樣的方法“吃”中,所得

Python繼承

#父類的多繼承 例:孩子繼承父親以及母親的屬性 #父親屬性 class Father(object) : def __init__(self,money): self.money = money def Running(self): pri

JAVA面向物件繼承案例的實現

繼承的相關概念: 繼承:多個類中存在相同屬性和行為時,將這些內容抽取到單獨一個類中,那麼多個類無需再定義這些屬性和行為,只要繼承這個新定義的類即可。java通過extends關鍵字可以實現類與類的繼承:             cl

PHP面向物件(三)繼承

1、繼承     繼承性:B類的物件擁有A類的全部屬性與行為,稱作B對A類的繼承。     好處:     1:提高了程式碼的複用性。     2:讓類與類之間產生了關係,提供了另一個特徵多型的前提     弊端:     打破了封裝性。對於一些類,或者類中功能,

實驗十一面向物件基礎 3、物件、方法實訓

1、  編寫一個程式,要求建立一個Student類,新增name和age屬性,為該屬性自動新增相應的getter和setter方法,並給出有參和無參的構造方法。 2、編寫一個類,類中定義一個靜態方法,用於求兩個整數的和。 請按照以下要求設計一個測試類Demo01,並進行測試。要求如下: 1)D

python面向物件學習(七)

目錄 1. 單例設計模式 設計模式 設計模式 是 前人工作的總結和提煉,通常,被人們廣泛流傳的設計模式都是針對 某一特定問題的成熟的解決方案 使用 設計模式 是為了可重用程式碼、讓程式碼更容易被他人理解、保證程式碼可靠性 單例設計模式 目的 —— 讓 類 建立的物件,在系統中 只有 唯一的一個例項

關於Python面向物件理解

1、什麼是面向物件 面向物件的程式設計的核心是物件(上帝式思維),要理解物件是什麼,就要把自己當成上帝,上帝眼裡世間存在的萬物皆物件,不存在的也可以創造出來。物件是特徵和技能的結合,其中特徵和技能分別對應物件的資料屬性和方法屬性。 2、優缺點 優點是: 便於維護,複用性強,具有很

python-----面向物件簡單理解

  我記得之前學習java時就常常聽到,什麼是面向物件呢,“封裝,繼承,多型”。   python中也一樣,也是這些定論。在程式中是先有類,再有物件,物件由類產生,   物件指的是類的例項,類是建立物件的模板,一個類可以建立多個物件,每個物件都是類型別的一個變數;建立物件的過程也叫作類的例項化。   (

【JAVA】基礎面向物件(抽象、封裝、繼承型)、方法重寫、訪問修飾符、關鍵字(this,super,static,final)、抽象、介面

面向物件概念: 面向過程:完成一件事情任何過程自己親力親為。 面向物件:找能完成這件事的物件。在java中就是找物件,調方法。 面向物件特徵:抽象,封裝,繼承,多型 類和物件的關係: 類:生活中事物的統稱,如動物,車,服裝,食品… 物件:就是類下面實實在在存在的個體,如動物類的物件就是:

Python基礎筆記_Day11_Python繼承繼承、重寫方法、Python型、Python靜態方法和方法

Day11_Python單繼承、多繼承、重寫方法、Python多型、Python靜態方法和類方法 11.01_Python語言基礎(繼承的介紹)(掌握) 11.02_Python語言基礎(單繼承)(掌握) 11.03_Python語言基礎(多繼承)(掌握) 11.04_Python語言基

C# 面向物件、根據不同操作符操作兩個變數

類 1、當使用類時,應新增一個新類 2、類名首字母需大寫 3、欄位用來儲存資料,private;屬性用來保護欄位;介面、建構函式、方法 public struct1 { // 自動屬性:雖然沒有寫欄位,但是還是會生

JavaScript(面向物件+原型理解+繼承+作用域鏈和閉包+this使用總結)

JavaScript(面向物件+原型理解+繼承+作用域鏈和閉包+this使用總結) 一、面向物件 1、什麼是面向物件 ☞ 面向物件就是把構成問題事物分解成多個物件,建立物件不是為了