欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python面向對象之繼承和組合用法實例分析

 更新時間:2018年08月27日 14:32:56   作者:—super—  
這篇文章主要介紹了Python面向對象之繼承和組合用法,結合實例形式分析了Python面向對象程序設計中組合與繼承的相關原理、使用方法及操作注意事項,需要的朋友可以參考下

本文實例講述了Python面向對象之繼承和組合用法。分享給大家供大家參考,具體如下:

面向對象的組合用法

軟件重用的重要方式除了繼承之外還有另外一種方式,即:組合

組合指的是,在一個類中以另外一個類的對象作為數(shù)據(jù)屬性,稱為類的組合

圓環(huán)是由兩個圓組成的,圓環(huán)的面積是外面圓的面積減去內部圓的面積。圓環(huán)的周長是內部圓的周長加上外部圓的周長。

這個時候,我們就首先實現(xiàn)一個圓形類,計算一個圓的周長和面積。然后在"環(huán)形類"中組合圓形的實例作為自己的屬性來用

# -*-coding:utf-8 -*-
#! python3
from math import pi
class Circle:
  '''
  定義了一個圓形類;
  提供計算面積(area)和周長(perimeter)的方法
  '''
  def __init__(self,radius):
    self.radius = radius
  def area(self):
    return pi * self.radius * self.radius
  def perimeter(self):
    return 2 * pi *self.radius
circle = Circle(10) #實例化一個圓
area1 = circle.area() #計算圓面積
per1 = circle.perimeter() #計算圓周長
print(area1,per1) #打印圓面積和周長
class Ring:
  '''
  定義了一個圓環(huán)類
  提供圓環(huán)的面積和周長的方法
  '''
  def __init__(self,radius_outside,radius_inside):
    self.outsid_circle = Circle(radius_outside)
    self.inside_circle = Circle(radius_inside)
  def area(self):
    return self.outsid_circle.area() - self.inside_circle.area()
  def perimeter(self):
    return self.outsid_circle.perimeter() + self.inside_circle.perimeter()
ring = Ring(10,5) #實例化一個環(huán)形
print(ring.perimeter()) #計算環(huán)形的周長
print(ring.area()) #計算環(huán)形的面積

運行結果:

314.1592653589793 62.83185307179586
94.24777960769379
235.61944901923448

繼承

繼承是一種創(chuàng)建新類的方式,在python中,新建的類可以繼承一個或多個父類,父類又可稱為基類或超類,新建的類稱為派生類或子類

python中類的繼承分為:單繼承和多繼承

查看繼承

>>> SubClass1.__bases__ #__base__只查看從左到右繼承的第一個子類,__bases__則是查看所有繼承的父類
(<class '__main__.ParentClass1'>,)
>>> SubClass2.__bases__
(<class '__main__.ParentClass1'>, <class '__main__.ParentClass2'>)

提示:如果沒有指定基類,python的類會默認繼承object類,object是所有python類的基類,它提供了一些常見方法(如__str__)的實現(xiàn)。

>>> ParentClass1.__bases__
(<class 'object'>,)
>>> ParentClass2.__bases__
(<class 'object'>,)

繼承與抽象(先抽象再繼承)

抽象即抽取類似或者說比較像的部分。

抽象分成兩個層次:

1.將奧巴馬和梅西這倆對象比較像的部分抽取成類;

2.將人,豬,狗這三個類比較像的部分抽取成父類。

抽象最主要的作用是劃分類別(可以隔離關注點,降低復雜度)

繼承:是基于抽象的結果,通過編程語言去實現(xiàn)它,肯定是先經(jīng)歷抽象這個過程,才能通過繼承的方式去表達出抽象的結構。

抽象只是分析和設計的過程中,一個動作或者說一種技巧,通過抽象可以得到類

繼承與重用性

在開發(fā)程序的過程中,如果我們定義了一個類A,然后又想新建立另外一個類B,但是類B的大部分內容與類A的相同時

我們不可能從頭開始寫一個類B,這就用到了類的繼承的概念。

通過繼承的方式新建類B,讓B繼承A,B會‘遺傳'A的所有屬性(數(shù)據(jù)屬性和函數(shù)屬性),實現(xiàn)代碼重用

派生

當然子類也可以添加自己新的屬性或者在自己這里重新定義這些屬性(不會影響到父類),需要注意的是,一旦重新定義了自己的屬性且與父類重名,那么調用新增的屬性時,就以自己為準了。

在子類中,新建的重名的函數(shù)屬性,在編輯函數(shù)內功能的時候,有可能需要重用父類中重名的那個函數(shù)功能,應該是用調用普通函數(shù)的方式,即:類名.func(),此時就與調用普通函數(shù)無異了,因此即便是self參數(shù)也要為其傳值.

在python3中,子類執(zhí)行父類的方法也可以直接用super方法.

# -*-coding:utf-8 -*-
#! python3
class A:
  def hahaha(self):
    print('A')
class B(A):
  def hahaha(self):
    super().hahaha()
    #super(B,self).hahaha()
    #A.hahaha(self)
    print('B')
a = A()
b = B()
b.hahaha()
super(B,b).hahaha()

運行結果:

A
B
A

通過繼承建立了派生類與基類之間的關系,它是一種'是'的關系,比如白馬是馬,人是動物。

當類之間有很多相同的功能,提取這些共同的功能做成基類,用繼承比較好,比如教授是老師

更多關于Python相關內容感興趣的讀者可查看本站專題:《Python面向對象程序設計入門與進階教程》、《Python數(shù)據(jù)結構與算法教程》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結》及《Python入門與進階經(jīng)典教程

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • python實現(xiàn)監(jiān)控linux性能及進程消耗性能的方法

    python實現(xiàn)監(jiān)控linux性能及進程消耗性能的方法

    這篇文章主要介紹了python實現(xiàn)監(jiān)控linux性能及進程消耗性能的方法,需要的朋友可以參考下
    2014-07-07
  • 如何利用?Python?繪制動態(tài)可視化圖表

    如何利用?Python?繪制動態(tài)可視化圖表

    這篇文章主要介紹了如何利用?Python?繪制動態(tài)可視化圖表,主要介紹介紹如何進行保存gif格式的文件。那么我們就開始進入主題,來談一下Python當中的gif模塊,需要的朋友可以參考一下
    2022-02-02
  • python 函數(shù)的詳解與應用范例

    python 函數(shù)的詳解與應用范例

    函數(shù)是組織好的,可重復使用的,用來實現(xiàn)單一,或相關聯(lián)功能的代碼段。函數(shù)能提高應用的模塊性,和代碼的重復利用率。你已經(jīng)知道Python提供了許多內建函數(shù),比如print()。但你也可以自己創(chuàng)建函數(shù),這被叫做用戶自定義函數(shù)
    2021-11-11
  • python面向對象入門教程之從代碼復用開始(一)

    python面向對象入門教程之從代碼復用開始(一)

    這篇文章主要給大家介紹了關于python面向對象入門教程之從代碼復用開始的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友們來一起看看吧
    2018-12-12
  • Python 初始化多維數(shù)組代碼

    Python 初始化多維數(shù)組代碼

    python多維數(shù)組方法示例代碼
    2008-09-09
  • python基礎教程之Hello World!

    python基礎教程之Hello World!

    這篇文章主要介紹了python基礎教程之Hello World!,本文講解了命令行中、文件中、腳本文件中輸出Hello World的例子,需要的朋友可以參考下
    2014-08-08
  • python3中pip3安裝出錯,找不到SSL的解決方式

    python3中pip3安裝出錯,找不到SSL的解決方式

    今天小編就為大家分享一篇python3中pip3安裝出錯,找不到SSL的解決方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • pytorch加載預訓練模型與自己模型不匹配的解決方案

    pytorch加載預訓練模型與自己模型不匹配的解決方案

    這篇文章主要介紹了pytorch加載預訓練模型與自己模型不匹配的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-05-05
  • Python3處理文件中每個詞的方法

    Python3處理文件中每個詞的方法

    這篇文章主要介紹了Python3處理文件中每個詞的方法,可實現(xiàn)逐個處理文件中每個詞的功能,需要的朋友可以參考下
    2015-05-05
  • python負載均衡的簡單實現(xiàn)方法

    python負載均衡的簡單實現(xiàn)方法

    這篇文章給大家介紹用python實現(xiàn)最簡單的負載均衡方法,即將請求發(fā)送到未宕機的服務器上,感興趣的朋友一起看看吧
    2018-02-02

最新評論