在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

python類接口和抽象超類分析

jf_78858299 ? 來源:梯閱線條 ? 作者:小梯子 ? 2023-04-06 15:07 ? 次閱讀

1.1 導入模塊執行class語句

python導入模塊時會執行class語句及主體內的頂層語句。

示例

# test.py
class MyClass:
   print('MyClass')
# cmd執行下面語句
E:\\documents\\F盤>python
>>> import test
MyClass

1.2 pytho類接口技術

python類接口技術通過繼承實現。

# test.py
class Super:
   '''定義一個超類。
  定義一個method方法。
  定義一個delegate方法,方法內調用子類定義的action方法。
  '''
   def method(self):
       print('in Super.method')
   def delegate(self):
       '''調用子類定義的action'''
       self.action()
   
class Inheritor(Super):pass

class Replacer(Super):
   '''定義 Replacer 繼承 Super
  替換超類的 method 方法
  '''
   def method(self):
       print('in Replacer.method')

class Extender(Super):
   '''定義 Extender 繼承 Super
  調用超類的 method 方法, 并且進行擴展
  '''
   def method(self):
       print('Begin Extender.method')
       Super.method(self)
       print('End Extender.method')
       
class Provider(Super):
   '''定義 Provider 繼承 Super
  實現超類 delegate 內調用的 action 方法
  '''
   def action(self):
       print('in Provider.action')
       
if __name__ == '__main__':
   for cls in (Inheritor,Replacer,Extender,Provider):
       print('\\n{}....'.format(cls.__name__))
       cls().method()
       
   print('\\nProvider')
   p = Provider()
   p.delegate()

''' 運行結果

E:\\documents\\F盤>python test.py

Inheritor....
in Super.method

Replacer....
in Replacer.method

Extender....
Begin Extender.method
in Super.method
End Extender.method

Provider....
in Super.method

Provider
in Provider.action
'''

1.3 python抽象超類

python類的部分行為由子類提供,則為抽象超類。

1.3.1 調用方法時觸發提示

顯式要求子類必須實現抽象超類的方法:

(1) 方法一,在超類方法用assert False

(2) 方法二,在超類方法用 raise NotImplementedError

未實現,則在實例調用方法時觸發報錯提示。

子類和超類都未提供方法 ,報 has no attribute

>>> class AbsSuper:
   def delegate(self):
       self.action()
       
>>> class Provider(AbsSuper):pass
>>> p=Provider()
>>> p.delegate()
Traceback (most recent call last):
 File ", line 1, in

在超類方法用assert False

>>> class AbsSuper:
   def delegate(self):
       self.action()
   def action(self):
       assert False,'子類必須定義 action'

       
>>> class Provider(AbsSuper):pass

>>> Provider().delegate()
Traceback (most recent call last):
 File ", line 1, in

在超類方法用raise NotImplementedError

>>> class AbsSuper:
   def delegate(self):
       self.action()
   def action(self):
       raise NotImplementedError('子類必須定義 action')
>>> class Provider(AbsSuper):pass

>>> Provider().delegate()
Traceback (most recent call last):
 File ", line 1, in

1.3.2 創建實例時觸發提示

(1) 帶有@abstractmethod修飾的方法為抽象方法。

(2) 帶有抽象方法的類不能進行實例化。

(3) 超類有抽象方法時,子類必須重寫超類的抽象方法。

(4) 未重寫,則創建實例時觸發報錯提示。

抽象方法定義:

(1) python3:超類頭部括號送metaclass**=**ABCMeta。

(2) python2:超類主體定義**metaclass****=**ABCMeta。

(3) 用@abstractmethod修飾方法。

python3示例

>>> from abc import ABCMeta,abstractmethod
>>> class MySuper(metaclass=ABCMeta):
   def delegate(self):
       self.action()
   # @abstractmethod 為抽象方法,子類必須重寫
   @abstractmethod
   def action(self):
       pass  # 抽象方法在父類通常留空,用pass進行占位

   
>>> ms=MySuper()
Traceback (most recent call last):
 File "
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口技術
    +關注

    關注

    1

    文章

    276

    瀏覽量

    41632
  • Class
    +關注

    關注

    0

    文章

    53

    瀏覽量

    19960
  • python
    +關注

    關注

    56

    文章

    4821

    瀏覽量

    85776
收藏 0人收藏

    評論

    相關推薦

    如何使用Python? 優勢有哪些?

      Python是一種面向對象的高級語言,因此類對于Python非常重要。是一個空間,在該空間中變量(屬性/方法)分別存儲。運算符' . '用于調用的屬性和方法。
    發表于 07-30 18:08

    python的理解與使用

    python的理解與使用1. 通俗理解(英文名 class),是具有相同特性(屬性)和行為(方法)的對象(實例)的抽象模板。從定義上來
    發表于 03-07 16:51

    JAVA語言的抽象封裝與

    JAVA語言的抽象封裝與5.1 抽象與封裝5.2 Java的5.3 的修飾符5.4 域5.5 方法5.6 訪問控制符面向對象的程序設計
    發表于 12-14 20:33 ?45次下載

    抽象類接口的區別及用法

    接口只能包含方法聲明,而抽象類還可以包含方法的定義。
    發表于 12-28 14:34 ?1632次閱讀

    《Visual C# 2005開發技術》抽象類、多態及接口

    《Visual C# 2005開發技術》抽象類、多態及接口
    發表于 02-07 15:17 ?0次下載

    分析java接口抽象類區別

    一。抽象類 二。接口 三。抽象類接口的區別 一。抽象類 在了解抽象類之前,先來了解一下
    發表于 09-27 16:40 ?0次下載

    python的理解與使用

    python的理解與使用 1. 通俗理解 (英文名 class),是具有相同特性(屬性)和行為(方法)的對象(實例)的抽象模板。 從定
    的頭像 發表于 03-07 16:51 ?1751次閱讀

    Python繼承的基本規則

    繼承規則 與其他基于的語言一樣,可以通過繼承組合多個定義。 定義可以擴展(或繼承)多個其他。這些又可以擴展其他
    的頭像 發表于 09-20 14:24 ?640次閱讀

    java接口抽象類的區別

    Java中的接口(Interface)和抽象類(Abstract class)都是抽象的概念,它們可以用來定義的行為和特征。雖然它們具有一些相似之處,但也存在一些重要的區別。本文將詳
    的頭像 發表于 11-21 09:45 ?672次閱讀

    Java中抽象類接口的介紹

    Java是一種面向對象的編程語言,提供了抽象類接口兩種機制來幫助開發人員組織和管理代碼。本文將詳細介紹Java語言中抽象類接口的概念、特點、使用方式以及它們之間的區別和聯系。
    的頭像 發表于 11-21 09:47 ?591次閱讀

    抽象類可以實現接口

    抽象類是一種特殊的,在面向對象編程中起到了很重要的作用。同時,接口也是面向對象編程中的一個重要概念,用于定義的契約和行為。抽象類
    的頭像 發表于 11-21 09:49 ?1418次閱讀

    java接口是特殊的抽象類

    Java接口是一種特殊的抽象類嗎? 在Java編程語言中,接口(interface)與抽象類(abstract class)是兩種不同的概念,盡管它們之間存在一些相似之處,但在設計和使
    的頭像 發表于 11-21 10:07 ?796次閱讀

    如何理解java中的抽象類

    Java中的抽象類是一種特殊的,無法被實例化,只能被繼承。它是一個中間層的,位于具體接口之間,用于定義通用的屬性和方法,并提供一些默
    的頭像 發表于 11-21 10:16 ?726次閱讀

    java抽象類可以有普通方法嗎

    Java中的抽象類可以有普通方法,但它也可以有抽象方法。抽象類是一種中間狀態,介于普通接口之間。它允許定義方法的具體實現,同時也可以定義
    的頭像 發表于 11-21 10:22 ?1821次閱讀

    java抽象類可以有構造函數嗎

    Java 中,抽象類是一種不能直接實例化的,它通常用作其他的父接口的實現。
    的頭像 發表于 11-21 10:23 ?1214次閱讀

    電子發燒友

    中國電子工程師最喜歡的網站

    • 2931785位工程師會員交流學習
    • 獲取您個性化的科技前沿技術信息
    • 參加活動獲取豐厚的禮品
    主站蜘蛛池模板: 免费黄色a视频 | 高h水果榨汁play男男 | 天天做天天爱天天综合网2021 | 精品成人在线 | 国产98在线传媒在线视频 | 黄网站在线观看永久免费 | 日本午夜大片 | 香蕉视频网站在线播放 | 中文天堂最新版资源新版天堂资源 | 午夜男人的天堂 | 特级一级黄色片 | 色综合天天综合 | 一本到中文字幕高清不卡在线 | 午夜小视频男女在线观看 | 中文字幕乱码人成乱码在线视频 | 午夜精品久久久久 | 欧美成人猛男性色生活 | 欧美一级欧美一级高清 | 日本在线一区 | 2018天天拍拍拍免费视频 | 国产卡一卡2卡三卡免费视频 | h小视频在线观看网 | 日本三级香港三级三级人!妇久 | 色手机在线 | 黄网站视频观看免费 | 亚洲深夜 | 欧美高清xx| 欧美性久久久久 | 污污的网站免费阅读 | 一色屋成人免费精品网 | 三级在线播放 | 伊人网综合在线观看 | 亚洲一区免费视频 | 亚洲开心激情网 | www日| 色噜噜成人综合网站 | 亚洲成在线 | 色吊丝中文字幕 | 成年视频xxxxx免费播放软件 | 国产一级做a爰片久久毛片男 | avtt香蕉|