最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python面向?qū)ο箢惖睦^承實(shí)例詳解

 更新時(shí)間:2018年06月27日 11:32:55   作者:Bigberg  
這篇文章主要介紹了Python面向?qū)ο箢惖睦^承,結(jié)合實(shí)例形式詳細(xì)分析了Python面向?qū)ο蟪绦蛟O(shè)計(jì)中類的繼承原理、定義、使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了Python面向?qū)ο箢惖睦^承。分享給大家供大家參考,具體如下:

一、概述

面向?qū)ο缶幊?(OOP) 語言的一個(gè)主要功能就是“繼承”。繼承是指這樣一種能力:它可以使用現(xiàn)有類的所有功能,并在無需重新編寫原來的類的情況下對(duì)這些功能進(jìn)行擴(kuò)展。

通過繼承創(chuàng)建的新類稱為“子類”或“派生類”,被繼承的類稱為“基類”、“父類”或“超類”,繼承的過程,就是從一般到特殊的過程。在某些 OOP 語言中,一個(gè)子類可以繼承多個(gè)基類。但是一般情況下,一個(gè)子類只能有一個(gè)基類,要實(shí)現(xiàn)多重繼承,可以通過多級(jí)繼承來實(shí)現(xiàn)。

繼承概念的實(shí)現(xiàn)方式主要有2類:實(shí)現(xiàn)繼承、接口繼承。

實(shí)現(xiàn)繼承是指使用基類的屬性和方法而無需額外編碼的能力。

接口繼承是指僅使用屬性和方法的名稱、但是子類必須提供實(shí)現(xiàn)的能力(子類重構(gòu)爹類方法)。

在考慮使用繼承時(shí),有一點(diǎn)需要注意,那就是兩個(gè)類之間的關(guān)系應(yīng)該是“屬于”關(guān)系。例如,Employee 是一個(gè)人,Manager 也是一個(gè)人,因此這兩個(gè)類都可以繼承 Person 類。但是 Leg 類卻不能繼承 Person 類,因?yàn)橥炔⒉皇且粋€(gè)人。

OO開發(fā)范式大致為:劃分對(duì)象→抽象類→將類組織成為層次化結(jié)構(gòu)(繼承和合成) →用類與實(shí)例進(jìn)行設(shè)計(jì)和實(shí)現(xiàn)幾個(gè)階段。

二、類的繼承

2.1 繼承的定義

class Person(object):  # 定義一個(gè)父類
  def talk(self):  # 父類中的方法
    print("person is talking....")
class Chinese(Person):  # 定義一個(gè)子類, 繼承Person類
  def walk(self):   # 在子類中定義其自身的方法
    print('is walking...')
c = Chinese()
c.talk()   # 調(diào)用繼承的Person類的方法
c.walk()   # 調(diào)用本身的方法

輸出:

person is talking....
is walking...

2.2 構(gòu)造函數(shù)的繼承

如果我們要給實(shí)例 c 傳參,我們就要使用到構(gòu)造函數(shù),那么構(gòu)造函數(shù)該如何繼承,同時(shí)子類中又如何定義自己的屬性?

繼承類的構(gòu)造方法:

1.經(jīng)典類的寫法: 父類名稱.__init__(self,參數(shù)1,參數(shù)2,...)

2. 新式類的寫法:super(子類,self).__init__(參數(shù)1,參數(shù)2,....)

class Person(object):
  def __init__(self, name, age):
    self.name = name
    self.age = age
    self.weight = 'weight'
  def talk(self):
    print("person is talking....")
class Chinese(Person):
  def __init__(self, name, age, language): # 先繼承,在重構(gòu)
    Person.__init__(self, name, age) #繼承父類的構(gòu)造方法,也可以寫成:super(Chinese,self).__init__(name,age)
    self.language = language  # 定義類的本身屬性
  def walk(self):
    print('is walking...')
class American(Person):
  pass
c = Chinese('bigberg', 22, 'Chinese')

如果我們只是簡(jiǎn)單的在子類Chinese中定義一個(gè)構(gòu)造函數(shù),其實(shí)就是在重構(gòu)。這樣子類就不能繼承父類的屬性了。所以我們?cè)诙x子類的構(gòu)造函數(shù)時(shí),要先繼承再構(gòu)造,這樣我們也能獲取父類的屬性了。

子類構(gòu)造函數(shù)基礎(chǔ)父類構(gòu)造函數(shù)過程如下:

實(shí)例化對(duì)象c ----> c 調(diào)用子類__init__()  ---- > 子類__init__()繼承父類__init__()  ----- > 調(diào)用父類 __init__()

2.3 子類對(duì)父類方法的重寫

如果我們對(duì)基類/父類的方法需要修改,可以在子類中重構(gòu)該方法。如下的talk()方法

class Person(object):
  def __init__(self, name, age):
    self.name = name
    self.age = age
    self.weight = 'weight'
  def talk(self):
    print("person is talking....")
class Chinese(Person):
  def __init__(self, name, age, language):
    Person.__init__(self, name, age)
    self.language = language
    print(self.name, self.age, self.weight, self.language)
  def talk(self): # 子類 重構(gòu)方法
    print('%s is speaking chinese' % self.name)
  def walk(self):
    print('is walking...')
c = Chinese('bigberg', 22, 'Chinese')
c.talk()

輸出:

bigberg 22 weight Chinese
bigberg is speaking chinese

三、類繼承的事例

class SchoolMember(object):
  '''學(xué)習(xí)成員基類'''
  member = 0
  def __init__(self, name, age, sex):
    self.name = name
    self.age = age
    self.sex = sex
    self.enroll()
  def enroll(self):
    '注冊(cè)'
    print('just enrolled a new school member [%s].' % self.name)
    SchoolMember.member += 1
  def tell(self):
    print('----%s----' % self.name)
    for k, v in self.__dict__.items():
      print(k, v)
    print('----end-----')
  def __del__(self):
    print('開除了[%s]' % self.name)
    SchoolMember.member -= 1
class Teacher(SchoolMember):
  '教師'
  def __init__(self, name, age, sex, salary, course):
    SchoolMember.__init__(self, name, age, sex)
    self.salary = salary
    self.course = course
  def teaching(self):
    print('Teacher [%s] is teaching [%s]' % (self.name, self.course))
class Student(SchoolMember):
  '學(xué)生'
  def __init__(self, name, age, sex, course, tuition):
    SchoolMember.__init__(self, name, age, sex)
    self.course = course
    self.tuition = tuition
    self.amount = 0
  def pay_tuition(self, amount):
    print('student [%s] has just paied [%s]' % (self.name, amount))
    self.amount += amount
t1 = Teacher('Wusir', 28, 'M', 3000, 'python')
t1.tell()
s1 = Student('haitao', 38, 'M', 'python', 30000)
s1.tell()
s2 = Student('lichuang', 12, 'M', 'python', 11000)
print(SchoolMember.member)
del s2
print(SchoolMember.member)

輸出:

----end-----
just enrolled a new school member [haitao].
----haitao----
age 38
sex M
name haitao
amount 0
course python
tuition 30000
----end-----
just enrolled a new school member [lichuang].
3
開除了[lichuang]
2
開除了[Wusir]
開除了[haitao]

更多關(guān)于Python相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Python數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Python函數(shù)使用技巧總結(jié)》、《Python字符串操作技巧匯總》、《Python編碼操作技巧總結(jié)》及《Python入門與進(jìn)階經(jīng)典教程

希望本文所述對(duì)大家Python程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • selenium設(shè)置瀏覽器為headless無頭模式(Chrome和Firefox)

    selenium設(shè)置瀏覽器為headless無頭模式(Chrome和Firefox)

    這篇文章主要介紹了selenium設(shè)置瀏覽器為headless無頭模式(Chrome和Firefox),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • python3.6使用pickle序列化class的方法

    python3.6使用pickle序列化class的方法

    今天小編就為大家分享一篇python3.6使用pickle序列化class的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-10-10
  • 利用Python實(shí)現(xiàn)批量裁剪圖片

    利用Python實(shí)現(xiàn)批量裁剪圖片

    這篇文章主要為大家詳細(xì)介紹了如何基于Python如何批量裁剪圖片并保存,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,有需要的小伙伴可以了解一下
    2023-10-10
  • python?snap7讀寫PLC的操作方法

    python?snap7讀寫PLC的操作方法

    這篇文章主要介紹了python?snap7讀寫PLC的操作方法,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • 快速進(jìn)修Python指南之網(wǎng)絡(luò)編程及并發(fā)編程

    快速進(jìn)修Python指南之網(wǎng)絡(luò)編程及并發(fā)編程

    這篇文章主要為大家介紹了Java開發(fā)者如何快速進(jìn)修Python指南之網(wǎng)絡(luò)編程及并發(fā)編程實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • 全面理解Python中self的用法

    全面理解Python中self的用法

    Python中看到或使用self時(shí)一定要弄明白self的指代,這里就帶大家來全面理解Python中self的用法,需要的朋友可以參考下
    2016-06-06
  • Python 實(shí)現(xiàn)的 Google 批量翻譯功能

    Python 實(shí)現(xiàn)的 Google 批量翻譯功能

    這篇文章主要介紹了Python 實(shí)現(xiàn)的 Google 批量翻譯功能,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • Django配置Bootstrap, js實(shí)現(xiàn)過程詳解

    Django配置Bootstrap, js實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了Django配置Bootstrap, js實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • numpy matrix和array的乘和加實(shí)例

    numpy matrix和array的乘和加實(shí)例

    今天小編就為大家分享一篇numpy matrix和array的乘和加實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python 計(jì)算文件的md5值實(shí)例

    python 計(jì)算文件的md5值實(shí)例

    下面小編就為大家?guī)硪黄猵ython 計(jì)算文件的md5值實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-01-01

最新評(píng)論

甘谷县| 太湖县| 蒙城县| 拉萨市| 秦皇岛市| 普陀区| 措勤县| 增城市| 淳化县| 汉源县| 和平县| 会东县| 余江县| 宣武区| 吴川市| 盐源县| 咸宁市| 通道| 翁牛特旗| 隆林| 怀安县| 台州市| 太湖县| 邹平县| 丰顺县| 山西省| 广东省| 二连浩特市| 成安县| 冕宁县| 喀喇沁旗| 南雄市| 麦盖提县| 和平县| 阿克| 新竹市| 高密市| 德化县| 桦甸市| 泗洪县| 咸阳市|