在Python中,通过将函数传递给类构造函数来略微改变方法

在Python中,通过将函数传递给类构造函数来略微改变方法,python,Python,我正在编写一个类,它需要根据实例使用稍微不同的代码 我可以通过继承来实现这一点,但我想知道在实例化实例时通过将函数传递给构造函数来实现这一点是否会更简单 我是这样想的: class myClass(): def __init__(self, fn): self.myProperty = 1 self.instanceSpecificFunction = fn def myMethod(self): #Do things her

我正在编写一个类,它需要根据实例使用稍微不同的代码

我可以通过继承来实现这一点,但我想知道在实例化实例时通过将函数传递给构造函数来实现这一点是否会更简单

我是这样想的:

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
只是一个普通的函数参数,但代码中的某些参数闻起来不是很好)

让函数在模块中四处游荡通常会让我感到不舒服,除非该模块只是一个仅填充辅助函数的辅助模块。但在我看来,混合类和函数以及这些函数在类的实例上实际执行一些工作是有点混乱的

遗产在这里看起来很棒。只要为每个需要它的类重新定义一个不同的构造函数,当其他开发人员看到代码时,他们就会更好地了解正在发生的事情。最后,您需要为这些函数编写逻辑代码,那么为什么不在它们的实例所代表的类中编写逻辑代码呢

此外,您可能还想看看。这是一种可能满足你需求的创造性模式。您的想法是有道理的,但实现起来相当混乱。通过遵循一种模式,您可以确保采取正确的步骤来创建好的代码,可以理解并且可以重用。再看几个,也许其中一个就是你要找的


希望这有帮助

也许你正在寻找一种工厂模式?你所做的就是众所周知的,它没有什么可怕的。不是一个可怕的想法。这样的组合而不是继承允许您按照您的建议应用各种策略模式。不过,我同意@PauloBu的观点,工厂模式会让事情变得更干净、更容易阅读。谢谢。我也对以
self
作为参数的随机函数感到有点不舒服。我现在正在看工厂模式。@RobinL我还编辑了一个链接,提供了一个指向其他创作模式的链接,这正是您所寻找的:)祝您好运!