簡體   English   中英

通過將函數傳遞給Python中的類構造函數來輕松更改方法

[英]Slighly alter method by passing function to class constructor in Python

我正在寫一個需要根據實例使用略有不同的代碼的類。

我可以通過繼承來實現,但是我想知道在實例化實例時將一個函數傳遞給構造函數是否會更簡單。

我在想這樣的事情:

class myClass():

    def __init__(self, fn):
        self.myProperty = 1
        self.instanceSpecificFunction = fn

    def myMethod(self):

        #Do things here that are common to all instances of class

        #[common code would be here]

        #But then run some code that is specific to this instance of the class
        self.instanceSpecificFunction(self)

def functionThatsSpecificToThisInstance(self):

    #In general, this code would want 
    #to be different if we instantiated a different instance

    self.myProperty = 3

myInstance = myClass(functionThatsSpecificToThisInstance)  

myInstance.myMethod()

這是一個可怕的主意嗎? 這種設計模式有名稱嗎? 如果是這樣,是否有“最佳”方法?

非常感謝,

知更鳥

實際上,我不太喜歡這個主意。

首先,您將擁有不屬於任何類的隨機函數,但它們實際上使用self作為參數(盡管self只是一個普通的函數參數,這在代碼中有些難聞 )。

使功能在模塊中徘徊通常會讓我感到不舒服,除非該模塊僅僅是僅填充了輔助功能輔助模塊 但是,從我的角度來看,將類和函數以及這些函數實際在類的實例上執行某些工作混合在一起有點混亂。

繼承在這里看起來很棒。 只需為每個需要它的類重新定義一個不同的構造函數,當其他開發人員看到代碼時,他們將對發生的事情有了更好的了解。 最終,您需要為這些函數編寫邏輯代碼,所以為什么不直接在其實例表示的類中進行編碼。

另外,您可能想看看Factory Pattern 這是一種創新的模式 ,可能會滿足您的需求。 您的想法很有道理,但是實現起來很混亂。 通過遵循一種模式,您確保采取權限步驟來創建可理解且可重用的漂亮代碼。 還要看看幾種創作模式 ,也許其中一種就是您要尋找的。

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM