国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【Python進(jìn)階編程】python編程高手常用的設(shè)計(jì)模式(持續(xù)更新中)

這篇具有很好參考價值的文章主要介紹了【Python進(jìn)階編程】python編程高手常用的設(shè)計(jì)模式(持續(xù)更新中)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

Python編程高手通常熟練運(yùn)用各種設(shè)計(jì)模式,這些設(shè)計(jì)模式有助于提高代碼的可維護(hù)性、可擴(kuò)展性和重用性。

以下是一些Python編程高手常用的設(shè)計(jì)模式:

1.單例模式(Singleton Pattern)

確保一個類只有一個實(shí)例,并提供全局訪問點(diǎn)。適用于需要共享資源或控制特定資源訪問的情景。

class Singleton(object):
    _instance = None

    def __new__(cls):
        if not cls._instance:
            cls._instance = super().__new__(cls)
        return cls._instance


s1 = Singleton()
s2 = Singleton()
print(id(s1))
print(id(s2)) # s1和s2的ID應(yīng)該是一樣的,表明這是同一個對象

【Python進(jìn)階編程】python編程高手常用的設(shè)計(jì)模式(持續(xù)更新中),python,開發(fā)語言

其他實(shí)現(xiàn)單例模式的方法。

1.1?使用模塊級別的變量實(shí)現(xiàn)單例模式

# singleton_module.py

class Singleton:
    def __init__(self):
        self.value = None

    def set_value(self, value):
        self.value = value

    def get_value(self):
        return self.value

singleton_instance = Singleton()

Python模塊在程序中只會被導(dǎo)入一次,因此模塊級別的變量可以實(shí)現(xiàn)單例模式。

在其他文件中,可以通過導(dǎo)入singleton_module模塊來獲取單例對象:

# main.py

from singleton_module import singleton_instance

# 使用單例對象
singleton_instance.set_value(42)
print(singleton_instance.get_value())

1.2 使用類裝飾器實(shí)現(xiàn)單例模式

可以使用裝飾器來確保類只有一個實(shí)例,并通過裝飾器在需要時創(chuàng)建實(shí)例。

# singleton_decorator.py

def singleton(cls):
    instances = {}

    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]

    return get_instance

@singleton
class Singleton:
    def __init__(self):
        self.value = None

    def set_value(self, value):
        self.value = value

    def get_value(self):
        return self.value

在這種方式下,可以直接使用@singleton裝飾器標(biāo)記一個類為單例,然后通過類的實(shí)例獲取單例對象:

# main.py

from singleton_decorator import Singleton

# 使用單例對象
singleton_instance = Singleton()
singleton_instance.set_value(42)
print(singleton_instance.get_value())



2. 工廠模式(Factory Pattern)

  1. ?定義一個接口,但由子類決定實(shí)例化哪個類。工廠方法模式將類的實(shí)例化延遲到子類。

    
    class Product(ABC):
        @abstractmethod
        def create_product(self):
            pass
    
    class ConcreteProductA(Product):
        def create_product(self):
            return "Product A"
    
    class ConcreteProductB(Product):
        def create_product(self):
            return "Product B"

    3.觀察者模式(Observer Pattern)

from abc import ABC, abstractmethod

class Observer(ABC):
    @abstractmethod
    def update(self, message):
        pass

class ConcreteObserver(Observer):
    def update(self, message):
        print(f"Received message: {message}")

class Subject:
    _observers = []

    def add_observer(self, observer):
        self._observers.append(observer)

    def remove_observer(self, observer):
        self._observers.remove(observer)

    def notify_observers(self, message):
        for observer in self._observers:
            observer.update(message)

??????4. 策略模式(Strategy Pattern)

  1. 定義一系列算法,將每個算法封裝起來,并使它們可以互換。策略模式可以使算法獨(dú)立于客戶端而變化。

    from abc import ABC, abstractmethod
    
    class Strategy(ABC):
        @abstractmethod
        def execute(self):
            pass
    
    class ConcreteStrategyA(Strategy):
        def execute(self):
            return "Strategy A"
    
    class ConcreteStrategyB(Strategy):
        def execute(self):
            return "Strategy B"
    
    class Context:
        def __init__(self, strategy):
            self._strategy = strategy
    
        def execute_strategy(self):
            return self._strategy.execute()

5.裝飾器模式(Decorator Pattern)

  1. ?動態(tài)地給一個對象添加一些額外的職責(zé),裝飾模式比繼承更加靈活。文章來源地址http://www.zghlxwxcb.cn/news/detail-820082.html

     
    from abc import ABC, abstractmethod
    
    class Component(ABC):
        @abstractmethod
        def operation(self):
            pass
    
    class ConcreteComponent(Component):
        def operation(self):
            return "Concrete Component"
    
    class Decorator(Component):
        _component = None
    
        def __init__(self, component):
            self._component = component
    
        def operation(self):
            return self._component.operation()
    
    class ConcreteDecorator(Decorator):
        def operation(self):
            return f"{super().operation()}, Decorated"

到了這里,關(guān)于【Python進(jìn)階編程】python編程高手常用的設(shè)計(jì)模式(持續(xù)更新中)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 設(shè)計(jì)模式:程序員的秘密武器(高手必備)

    在過去的幾十年的職業(yè)生涯中,我觀察到許多同事在技術(shù)方面取得了顯著的進(jìn)步和能力提升。然而,隨著時間的推移,他們似乎逐漸遇到了一個發(fā)展的瓶頸。盡管大家都渴望以最快的速度提升自己的技能水平,但他們忽視了一個關(guān)鍵的因素,那就是內(nèi)功修煉。 是的,我相信大

    2024年02月04日
    瀏覽(27)
  • Python 進(jìn)階指南(編程輕松進(jìn)階):十五、面向?qū)ο缶幊毯皖? decoding=
  • python進(jìn)階編程

    lambda匿名函數(shù) python使用lambda表達(dá)式來創(chuàng)建匿名函數(shù) 語法 lambda函數(shù)不能訪問自己的參數(shù)列表以外或者全局命名空間里面的參數(shù) lambda的主體是一個表達(dá)式而不是代碼塊,僅僅能封裝有限的邏輯進(jìn)去 推導(dǎo)式 【Python】推導(dǎo)式(列表推導(dǎo)式、元組推導(dǎo)式、字典推導(dǎo)式、集合推導(dǎo)式)

    2024年02月14日
    瀏覽(12)
  • Python之設(shè)計(jì)模式

    Python之設(shè)計(jì)模式

    設(shè)計(jì)模式是面向?qū)ο笳Z言特有的內(nèi)容,是我們在面臨某一類問題時候固定的做法,設(shè)計(jì)模式有很多種,比較流行的是:GOF(Goup Of Four)23種設(shè)計(jì)模式。當(dāng)然,我們沒有必要全部學(xué)習(xí),學(xué)習(xí)幾個常用的即可。 對于初學(xué)者,我們學(xué)習(xí)兩個最常用的模式:工廠模式和單例模式。 工廠

    2024年02月09日
    瀏覽(14)
  • Python設(shè)計(jì)模式詳解

    在軟件開發(fā)中,設(shè)計(jì)模式是解決特定問題的通用方法。本博客將探討Python中的設(shè)計(jì)模式,以及如何應(yīng)用它們來解決常見問題。我們將重點(diǎn)關(guān)注兩個Gang?of?Four(GOF)提出的基本原則: 基于接口編程而不是實(shí)現(xiàn):?Duck?Typing在Python中很常見,雖然我們不顯式定義接口,但通過鴨

    2024年01月18日
    瀏覽(92)
  • 【python設(shè)計(jì)模式】13、策略模式

    哲學(xué)思想: 策略模式是一種設(shè)計(jì)模式,它可以使得我們在程序中根據(jù)需要動態(tài)地選擇算法的具體實(shí)現(xiàn)方式。策略模式的思想源于哲學(xué)中的“多元論”(pluralism)和“實(shí)用主義”(pragmatism)。 多元論認(rèn)為,世界上存在著許多不同的觀點(diǎn)和方法,沒有一個固定的標(biāo)準(zhǔn)或者方法是

    2023年04月08日
    瀏覽(37)
  • 95 | Python 設(shè)計(jì)模式 —— 策略模式

    策略模式是一種行為型設(shè)計(jì)模式,它定義了一系列的算法,并將每個算法封裝在獨(dú)立的策略類中,使得這些算法可以相互替換,而不影響客戶端的使用。策略模式可以讓客戶端根據(jù)不同的需求選擇不同的算法,從而使得系統(tǒng)更加靈活和可擴(kuò)展。 在本教程中,我們將學(xué)習(xí)策略模

    2024年02月13日
    瀏覽(15)
  • 10.python設(shè)計(jì)模式【代理模式】

    10.python設(shè)計(jì)模式【代理模式】

    內(nèi)容:為其他對象提供一種代理一控制對這個對象的訪問 應(yīng)用場景: 遠(yuǎn)程代理: 為遠(yuǎn)程的對象提供代理 虛代理:根據(jù)需要創(chuàng)建很大的對象 保護(hù)代理:控制對原始對象的訪問,用于對象有不同訪問權(quán)限時 UML圖 舉個例子: 需求:完成一個文件讀取和寫入,完成遠(yuǎn)程代理、需

    2024年02月15日
    瀏覽(21)
  • Python 進(jìn)階指南(編程輕松進(jìn)階):十三、性能測量和大 O 算法分析

    Python 進(jìn)階指南(編程輕松進(jìn)階):十三、性能測量和大 O 算法分析

    原文:http://inventwithpython.com/beyond/chapter13.html 對于大多數(shù)小程序來說,性能并不那么重要。我們可能會花一個小時編寫一個腳本來自動執(zhí)行一個只需要幾秒鐘就能運(yùn)行的任務(wù)。即使需要更長的時間,當(dāng)我們端著一杯咖啡回到辦公桌時,這個項(xiàng)目也可能已經(jīng)完成了。 有時候花時

    2023年04月09日
    瀏覽(85)
  • 5.python設(shè)計(jì)模式【單例模式】

    5.python設(shè)計(jì)模式【單例模式】

    內(nèi)容:保證一個類只有一個實(shí)例,并提供一個訪問它的全局訪問點(diǎn) 角色: 單例(Singleton) UML圖 舉個例子: 需求:一個類只能實(shí)例化一個對象,不能實(shí)例化多個對象 輸出結(jié)果 20 20 139718467807696 139718467807696 說明是同一個對象 優(yōu)點(diǎn): 對唯一實(shí)例的受控訪問 單例相當(dāng)于全局變量

    2024年02月15日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包