chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

python類(lèi)接口和抽象超類(lèi)分析

jf_78858299 ? 來(lái)源:梯閱線(xiàn)條 ? 作者:小梯子 ? 2023-04-06 15:07 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

1.1 導(dǎo)入模塊執(zhí)行class語(yǔ)句

python導(dǎo)入模塊時(shí)會(huì)執(zhí)行class語(yǔ)句及主體內(nèi)的頂層語(yǔ)句。

示例

# test.py
class MyClass:
   print('MyClass')
# cmd執(zhí)行下面語(yǔ)句
E:\\documents\\F盤(pán)>python
>>> import test
MyClass

1.2 pytho類(lèi)接口技術(shù)

python類(lèi)接口技術(shù)通過(guò)繼承實(shí)現(xiàn)。

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

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

class Extender(Super):
   '''定義 Extender 繼承 Super
  調(diào)用超類(lèi)的 method 方法, 并且進(jìn)行擴(kuò)展
  '''
   def method(self):
       print('Begin Extender.method')
       Super.method(self)
       print('End Extender.method')
       
class Provider(Super):
   '''定義 Provider 繼承 Super
  實(shí)現(xiàn)超類(lèi) delegate 內(nèi)調(diào)用的 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()

''' 運(yùn)行結(jié)果

E:\\documents\\F盤(pán)>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抽象超類(lèi)

python類(lèi)的部分行為由子類(lèi)提供,則為抽象超類(lèi)。

1.3.1 調(diào)用方法時(shí)觸發(fā)提示

顯式要求子類(lèi)必須實(shí)現(xiàn)抽象超類(lèi)的方法:

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

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

未實(shí)現(xiàn),則在實(shí)例調(diào)用方法時(shí)觸發(fā)報(bào)錯(cuò)提示。

子類(lèi)和超類(lèi)都未提供方法 ,報(bào) 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

在超類(lèi)方法用assert False

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

       
>>> class Provider(AbsSuper):pass

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

在超類(lèi)方法用raise NotImplementedError

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

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

1.3.2 創(chuàng)建實(shí)例時(shí)觸發(fā)提示

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

(2) 帶有抽象方法的類(lèi)不能進(jìn)行實(shí)例化。

(3) 超類(lèi)有抽象方法時(shí),子類(lèi)必須重寫(xiě)超類(lèi)的抽象方法。

(4) 未重寫(xiě),則創(chuàng)建實(shí)例時(shí)觸發(fā)報(bào)錯(cuò)提示。

抽象方法定義:

(1) python3:超類(lèi)頭部括號(hào)送metaclass**=**ABCMeta。

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

(3) 用@abstractmethod修飾方法。

python3示例

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

   
>>> ms=MySuper()
Traceback (most recent call last):
 File "
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口技術(shù)
    +關(guān)注

    關(guān)注

    1

    文章

    277

    瀏覽量

    42044
  • Class
    +關(guān)注

    關(guān)注

    0

    文章

    54

    瀏覽量

    20291
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4848

    瀏覽量

    88894
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    如何使用Python類(lèi)? 優(yōu)勢(shì)有哪些?

      Python是一種面向?qū)ο蟮母呒?jí)語(yǔ)言,因此類(lèi)對(duì)于Python非常重要。類(lèi)是一個(gè)空間,在該空間中變量(屬性/方法)分別存儲(chǔ)。運(yùn)算符' . '用于調(diào)用類(lèi)的屬性和方法。
    發(fā)表于 07-30 18:08

    python類(lèi)的理解與使用

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

    JAVA語(yǔ)言的抽象封裝與類(lèi)

    JAVA語(yǔ)言的抽象封裝與類(lèi)5.1 抽象與封裝5.2 Java的類(lèi)5.3 類(lèi)的修飾符5.4 域5.5 方法5.6 訪(fǎng)問(wèn)控制符面向?qū)ο蟮某绦蛟O(shè)計(jì)
    發(fā)表于 12-14 20:33 ?45次下載

    抽象類(lèi)接口的區(qū)別及用法

    接口只能包含方法聲明,而抽象類(lèi)還可以包含方法的定義。
    發(fā)表于 12-28 14:34 ?1709次閱讀

    《Visual C# 2005開(kāi)發(fā)技術(shù)》抽象類(lèi)、多態(tài)及接口

    《Visual C# 2005開(kāi)發(fā)技術(shù)》抽象類(lèi)、多態(tài)及接口
    發(fā)表于 02-07 15:17 ?0次下載

    分析java接口抽象類(lèi)區(qū)別

    一。抽象類(lèi) 二。接口 三。抽象類(lèi)接口的區(qū)別 一。抽象類(lèi) 在了解抽象類(lèi)之前,先來(lái)了解一下
    發(fā)表于 09-27 16:40 ?0次下載

    python類(lèi)的理解與使用

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

    Python類(lèi)繼承的基本規(guī)則

    繼承規(guī)則 與其他基于類(lèi)的語(yǔ)言一樣,可以通過(guò)繼承組合多個(gè)類(lèi)定義。 類(lèi)定義可以擴(kuò)展(或繼承)多個(gè)其他類(lèi)。這些類(lèi)又可以擴(kuò)展其他
    的頭像 發(fā)表于 09-20 14:24 ?870次閱讀

    java接口抽象類(lèi)的區(qū)別

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

    Java中抽象類(lèi)接口的介紹

    Java是一種面向?qū)ο蟮木幊陶Z(yǔ)言,提供了抽象類(lèi)接口兩種機(jī)制來(lái)幫助開(kāi)發(fā)人員組織和管理代碼。本文將詳細(xì)介紹Java語(yǔ)言中抽象類(lèi)接口的概念、特點(diǎn)、使用方式以及它們之間的區(qū)別和聯(lián)系。
    的頭像 發(fā)表于 11-21 09:47 ?819次閱讀

    抽象類(lèi)可以實(shí)現(xiàn)接口

    抽象類(lèi)是一種特殊的類(lèi),在面向?qū)ο缶幊讨衅鸬搅撕苤匾淖饔?。同時(shí),接口也是面向?qū)ο缶幊讨械囊粋€(gè)重要概念,用于定義類(lèi)的契約和行為。抽象類(lèi)
    的頭像 發(fā)表于 11-21 09:49 ?1734次閱讀

    java接口是特殊的抽象類(lèi)

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

    如何理解java中的抽象類(lèi)

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

    java抽象類(lèi)可以有普通方法嗎

    Java中的抽象類(lèi)可以有普通方法,但它也可以有抽象方法。抽象類(lèi)是一種中間狀態(tài),介于普通類(lèi)接口之間。它允許定義方法的具體實(shí)現(xiàn),同時(shí)也可以定義
    的頭像 發(fā)表于 11-21 10:22 ?2134次閱讀

    java抽象類(lèi)可以有構(gòu)造函數(shù)嗎

    Java 中,抽象類(lèi)是一種不能直接實(shí)例化的類(lèi),它通常用作其他類(lèi)的父類(lèi)接口的實(shí)現(xiàn)類(lèi)
    的頭像 發(fā)表于 11-21 10:23 ?1706次閱讀