繁体   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