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

Python抽象屬性使用解讀(@property+@abstractmethod)

 更新時(shí)間:2025年12月29日 09:24:24   作者:nvd11  
文章介紹了使用`@property`和`@abstractmethod`組合的Python編程模式,這種模式定義了一個(gè)只讀的、強(qiáng)制子類提供的數(shù)據(jù)接口,子類可以通過屬性或`@property`方法來實(shí)現(xiàn)這個(gè)接口,提供了靈活性和統(tǒng)一的調(diào)用方式

1. 為什么要組合使用?

BaseLoader 代碼中:

@property
@abstractmethod
def supported_extensions(self) -> list[str]:
    """Return list of supported file extensions."""
    pass

這種寫法的核心目的是:定義一個(gè)只讀的、強(qiáng)制子類提供的數(shù)據(jù)接口。

1.1 語義區(qū)別

  • 方法 (Method): 表示“動(dòng)作”或“計(jì)算”。調(diào)用需要括號(hào) ()。
  • 屬性 (Property): 表示“狀態(tài)”、“特征”或“配置”。調(diào)用不需要括號(hào)。

supported_extensions 本質(zhì)上是 Loader 的一種靜態(tài)特征(它支持什么后綴),而不是一個(gè)動(dòng)作(比如 load())。因此,將其定義為屬性在語義上更準(zhǔn)確。

2. 子類如何實(shí)現(xiàn)?

這是這種模式最強(qiáng)大的地方:它給了子類極大的靈活度。

父類定義了“我需要一個(gè)名為 supported_extensions 的屬性”,子類可以用以下兩種方式之一來滿足:

方式一:使用屬性 (最簡(jiǎn)單推薦)

這也是 Python 相比 Java 的一大優(yōu)勢(shì):抽象屬性可以用普通的類屬性或?qū)嵗龑傩詠砀采w。

class TextLoader(BaseLoader):
    # 直接定義一個(gè)列表,甚至不需要寫 @property 方法
    supported_extensions = ['.txt', '.md']

這種寫法非常干凈,看起來就像是在寫配置文件。

方式二:使用 @property 方法 (動(dòng)態(tài)計(jì)算)

如果你的屬性值不是固定的,而是需要計(jì)算得來的,可以使用這種方式。

class DynamicLoader(BaseLoader):
    @property
    def supported_extensions(self) -> list[str]:
        # 假設(shè)這里有復(fù)雜的邏輯
        import os
        return os.environ.get("ALLOWED_EXTS", ".txt").split(",")

3. 完整示例對(duì)比

from abc import ABC, abstractmethod

class Base(ABC):
    @property
    @abstractmethod
    def config(self):
        pass

# 實(shí)現(xiàn) 1: 靜態(tài)配置 (推薦)
class SimpleImpl(Base):
    config = {"timeout": 30}

# 實(shí)現(xiàn) 2: 動(dòng)態(tài)邏輯
class ComplexImpl(Base):
    @property
    def config(self):
        return {"timeout": self._calculate_timeout()}

    def _calculate_timeout(self):
        return 100

# 使用
s = SimpleImpl()
print(s.config) # {'timeout': 30}

c = ComplexImpl()
print(c.config) # {'timeout': 100}

4. 總結(jié)

使用 @property + @abstractmethod 的好處:

  1. 接口語義清晰:告訴使用者這是一個(gè)數(shù)據(jù)特征。
  2. 實(shí)現(xiàn)靈活:子類可以簡(jiǎn)單地用變量賦值,也可以用復(fù)雜的 getter 方法。
  3. 統(tǒng)一調(diào)用:無論子類怎么實(shí)現(xiàn),使用者都用 obj.field 來訪問,不需要關(guān)心背后是變量還是函數(shù)。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Python操作MySql數(shù)據(jù)庫和MsSql數(shù)據(jù)庫

    使用Python操作MySql數(shù)據(jù)庫和MsSql數(shù)據(jù)庫

    這篇文章介紹了使用Python操作MySql數(shù)據(jù)庫和MsSql數(shù)據(jù)庫的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • Python實(shí)現(xiàn)UDP與TCP通信的示例詳解

    Python實(shí)現(xiàn)UDP與TCP通信的示例詳解

    UDP是一種無連接的、不可靠的傳輸協(xié)議;TCP是一種可靠的、面向連接的傳輸協(xié)議。這篇文章主要介紹了Python實(shí)現(xiàn)UDP與TCP通信的方法,需要的可以參考一下
    2023-03-03
  • Python中不可錯(cuò)過的五個(gè)超有用函數(shù)

    Python中不可錯(cuò)過的五個(gè)超有用函數(shù)

    在本文中,我們用代碼詳細(xì)說明了Python中超實(shí)用的5個(gè)函數(shù)的重要作用,這些函數(shù)雖然簡(jiǎn)單,但卻是Python中功能最強(qiáng)大的函數(shù),下面一起來看看文章的詳細(xì)介紹吧,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-01-01
  • 使用celery和Django處理異步任務(wù)的流程分析

    使用celery和Django處理異步任務(wù)的流程分析

    Celery是 一個(gè)專注于實(shí)時(shí)處理的任務(wù)隊(duì)列,它還支持任務(wù)調(diào)度。 Celery快速,簡(jiǎn)單,高度可用且靈活。這篇文章主要介紹了使用celery和Django處理異步任務(wù)的流程分析,需要的朋友可以參考下
    2020-02-02
  • Python datetime庫函數(shù)的示例詳解

    Python datetime庫函數(shù)的示例詳解

    datetime?是 Python 內(nèi)置的日期時(shí)間處理庫,它包含了處理日期、時(shí)間、時(shí)間間隔等的類和函數(shù),這篇文章主要介紹了Python datetime庫函數(shù)的詳解,需要的朋友可以參考下
    2023-07-07
  • Python如何爬取b站熱門視頻并導(dǎo)入Excel

    Python如何爬取b站熱門視頻并導(dǎo)入Excel

    這篇文章主要介紹了Python如何爬取b站熱門視頻并導(dǎo)入Excel,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Python使用wxPython打造文件批量壓縮工具

    Python使用wxPython打造文件批量壓縮工具

    在日常工作中,我們經(jīng)常需要將多個(gè)文件打包壓縮,下面我們就來看看如何使用 Python 的 wxPython 庫,創(chuàng)建一個(gè)功能強(qiáng)大的圖形化文件批量壓縮工具吧
    2025-11-11
  • Python中的程序流程控制語句

    Python中的程序流程控制語句

    這篇文章主要介紹了Python中的程序流程控制語句,本篇博客將會(huì)講述一下Python語言中的流程控制語句,在高中我們數(shù)學(xué)中學(xué)過程序流程題,下面我們來看看python中得流程語句會(huì)是怎么樣呢,需要的小伙伴可以參考一下
    2022-02-02
  • python中數(shù)字列表轉(zhuǎn)化為數(shù)字字符串的實(shí)例代碼

    python中數(shù)字列表轉(zhuǎn)化為數(shù)字字符串的實(shí)例代碼

    先前學(xué)習(xí)過,數(shù)字和字符串都可以存儲(chǔ)到變量當(dāng)中,下面這篇文章主要給大家介紹了關(guān)于python中數(shù)字列表轉(zhuǎn)化為數(shù)字字符串的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • python自動(dòng)化辦公操作excel的示例詳解

    python自動(dòng)化辦公操作excel的示例詳解

    這篇文章主要為大家詳細(xì)介紹了如何利用python來實(shí)現(xiàn)自動(dòng)化辦公操作excel文件進(jìn)行各種樣式展示,并自動(dòng)發(fā)送文件給"老板"的郵箱,希望對(duì)大家有所幫助
    2024-03-03

最新評(píng)論

宝丰县| 遵化市| 山阳县| 潜山县| 浦北县| 揭西县| 德兴市| 防城港市| 江油市| 枝江市| 金华市| 菏泽市| 泰宁县| 周宁县| 天长市| 长治县| 富宁县| 贵溪市| 岳普湖县| 双流县| 老河口市| 沾化县| 维西| 华坪县| 龙泉市| 台中市| 蒲江县| 交口县| 广水市| 邯郸县| 安义县| 渝中区| 酉阳| 莱州市| 扎兰屯市| 仙桃市| 都匀市| 邢台市| 偏关县| 资溪县| 菏泽市|