国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Python - Python面向對象編程之類的繼承

Python面向對象編程之類的繼承

2022-02-22 00:26一碗周 Python

這篇文章主要介紹了Python面向對象編程之類的繼承,繼承Inheritance是指代碼復用的高級抽象,繼承是面向對象設計的精髓之一,實現了以類為單位的高級抽象級別代碼復用,下面進入文章看該內容的下詳情

1、對繼承的理解

繼承(Inheritance) :代碼復用的高級抽象

  • 繼承是面向對象設計的精髓之一
  • 實現了以類為單位的高級抽象級別代碼復用
  • 繼承是新定義類能夠幾乎完全使用原有類屬性與方法的過程

Python面向對象編程之類的繼承

不管是基類還是派生類,只是一種繼承說法,這都是普通的Python類

也可以按子類、父類和超類劃分。

最基礎的類是基類,經過一次繼承得出派生類,還可以再一次繼承,又得出一個派生類;現在最基礎的類和第一次繼承出來的派生類是父類與子類的關系,派生出來的類在最后一次派生出來的類也是父類與子類的關系,而最基本的類和最后一個派生類屬于超類和子類的關系

Python面向對象編程之類的繼承

派生類不僅可以繼承一個基類,也可以繼承多個基類,這就是所說的多繼承的概念

Python面向對象編程之類的繼承

 

2、類繼承的構建

類繼承的時候在定義的時候聲明繼承關系,語法結構如下

class <派生類名>(<基類名>):  # 基類名可以帶路徑:ModuleNama.BaseClassName
  def __init__(self, <參數列表>):
      <語句塊>
  ...

派生類可以直接使用基類的屬性和方法

  • 基類的屬性基本等于定義在派生類中
  • 派生類可以直接使用基類的類屬性、實例屬性
  • 派生類可以直接使用基類的各種方法
  • 使用基類的類方法和類屬性時,要用基類的類名調用

實例代碼:

class TestClass:
  def __init__(self, number):
      self.sum_number = 0
      for i in range(number + 1):
          self.sum_number += i

  def sum_num(self):
      return self.sum_number


class HumanNameClass(TestClass):
  def double_sum(self):
      return self.sum_number * 2  # 對基類屬性的使用


value1 = HumanNameClass(100)
print(value1.sum_num())  # 5050  # 對基類實例方法的使用
print(value1.double_sum())  # 10100  # 對派生類實例方法的使用

Python中有兩個與繼承關系判斷有關的函數

Python面向對象編程之類的繼承

接上面的代碼,

print(isinstance(value1, TestClass))  # True
print(isinstance(value1, HumanNameClass))  # True
print(isinstance(value1, int))  # False
print(issubclass(HumanNameClass, TestClass))  # True
print(issubclass(TestClass, HumanNameClass))  # False

 

3、Python中最基礎的類

因為Python中萬物皆對象,任何一個類也是對象、Python的所有數據類型也對象;Python語言提供所有類的最基礎類是object。

  • object是Python最基礎類的名詞,不需要翻譯
  • 所有了定義時默認繼承object
  • 保留屬性和保留方法本質上是object類的屬性和方法

示例代碼:

print(object.__name__)  # 打印object的名字  # object
print(object.__bases__)  # 打印object所繼承的類名稱  # ()
print(object.__doc__)  # 打印object類描述  # The most base type
print(object.__module__)  # 打印object所在模塊的名稱  # builtins
print(object.__class__)  # object所對應的類信息  # <class 'type'>

Python對象的三個要素:

  • 標識 identity:對象一旦構建不會改變,用id()獲得,一般是內存地址
  • 類型 type:對象的類型,用type()獲得
  • 值 value:分為可變mutable與不可變immutable兩種

兩個和基礎類有關的Python內置功能

 

函數/關鍵字 描述
id(x) 返回x的標識。CPython 中id()函數用于獲取對象的內存地址。
xisy 判斷x和y的標識是否相等,返回True或False,不判斷值

 

4、ython類的重載

重載是派生類對基類屬性或方法的在定義

  • 屬性重載:派生類定義并使用了與基類相同名稱的屬性
  • 方法重載:派生類定義并使用了與基類相同名稱的方法

4.1 屬性重載

屬性重載采用就近覆蓋原則,重載無需特殊標記。方法步驟

  • 優先使用派生類重定義的屬性和方法
  • 然后尋找基類的屬性和方法
  • 在尋找超類的屬性和方法

實例代碼:

class TestClass:
  text = "這是基類的類屬性"

  def __init__(self, number):
      self.sum_number = 0
      for i in range(number + 1):
          self.sum_number += i

  def sum_num(self):
      return self.sum_number


class HumanNameClass(TestClass):
  text = "這是派生類的類屬性"  # 類屬性重載

  def __init__(self, number):
      self.sum_number = 1000  # 實例屬性重載

  def double_sum(self):
      return self.sum_number * 2


value1 = HumanNameClass(100)
print(TestClass.text)  # 這是基類的類屬性
print(value1.text)  # 這是派生類的類屬性
print(value1.sum_num())  # 1000

4.2 方法重載

方法重載是派生類對基類方法的在定義;分為完全重載和增量重載

完全重載:派生類完全重定義與基類相同名稱的方法

直接在派生類中定義同名方法即可

示例代碼:

class TestClass:
  def __init__(self, number):
      self.sum_number = 0
      for i in range(number + 1):
          self.sum_number += i

  def sum_num(self):
      return self.sum_number


class HumanNameClass(TestClass):

  def sum_num(self):  # 方法的重建
      return self.sum_number * 2


value1 = HumanNameClass(100)
print(value1.sum_num())  # 10100

增量重載:派生類擴展定義與基類相同名稱的方法,語法結構

class <派生類名>(<基類名>):
  def <方法名>(self, <參數列表>):
      super().<基類方法名>(<參數列表>)
      ...

增量重載使用super()函數

示例代碼:

class TestClass:
  def test_text(self):
      print("這是基類的方法")


class TestClass1(TestClass):
  def test_text(self):  # 增量重載
      super().test_text()
      print("這是新增的方法里面的語句")


doc1 = TestClass()
doc2 = TestClass1()
print(doc1.test_text())
print(doc2.test_text())
'''
---輸出結果---
這是基類的方法
None   # 因為函數沒有返回值
這是基類的方法
這是新增的方法里面的語句
None  # 因為函數沒有返回值

'''

 

5、類的多繼承

多繼承的構建是在定義時聲明繼承關系,語法結構

class <類名>(<基類名1>, <基類名2>,..., <基類名N>):  # 基類名可以帶路徑:ModuleNama.BaseClassName
  def __init__(self, <參數列表>):
      <語句塊>
  ...

Python中多繼承采用深度優先, 從左至右的方法。所謂深度優先從左至右就是先從最左邊開始找,找到他的基類,如果基類沒有在往上面找,直到最基礎的object類時還沒有找到,才往右開始尋找。

Python面向對象編程之類的繼承

所有屬性和方法的使用按照“深度優先從左至右”的方式選取

構造函數也參照上述原則,super()也參照上述原則

多個基類的順序是關鍵

示例代碼:

class Test1:
  def test(self):
      text = "這是基類1"
      return text


class Test2:
  def test(self):
      text = "這是基類2"
      return text


class Test3(Test1, Test2):
  pass


class Test4(Test2, Test1):
  pass


value1 = Test3()
value2 = Test4()
print(value1.test())  # 這是基類1
print(value2.test())  # 這是基類2

循序決定輸出的結果

對繼承概念的理解,類繼承的構建,了解了object是Python中最基礎的類

類屬性的重載原則是最近覆蓋原則

類方法的重載:重新重載的話類似類屬性的重載;增量重載使用super()函數

多繼承采用的方法是深度優先,從左至右

到此這篇關于Python面向對象編程之類的繼承的文章就介紹到這了,更多相關Python類的繼承內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://juejin.cn/post/7023552816228761608

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久久久无码av | 国产精品成人av | 久久精品免费 | 精品日韩一区二区 | 一本久久综合亚洲鲁鲁五月天 | 中文字幕欧美在线 | 一级一片在线播放在线观看 | 亚洲精品综合 | 日韩精品一区二区三区 | 精品视频在线免费观看 | 欧美精品一区二区三区蜜桃视频 | 国产日韩欧美在线 | 亚洲综合视频 | 欧美激情精品久久久久久变态 | 黄色片在线播放 | 欧美精品综合 | 中文字幕日韩欧美一区二区三区 | 91色在线视频 | 欧美性hd | 精品亚洲永久免费精品 | 天天射天天 | 日韩中文字幕在线视频 | 国产欧美精品一区二区三区四区 | 久久久精品网站 | 狠狠色噜噜 | 久久中文字幕在线观看 | 在线观看成人 | 99精品国产一区二区青青牛奶 | 午夜免费电影 | 羞羞影视 | 色噜噜狠狠狠综合曰曰曰 | 综合网av | 亚洲精品免费在线 | 一级毛片免费网站 | 精品成人在线视频 | 精品一区二区不卡 | 国产精品视频网 | 久久成人国产精品 | 五月婷综合 | 国产成人精品一区二区三区四区 | 夜夜av |