Python 3 OOP调用方法
我的目标是实现一个有3种变体的算法。我决定创建3个独立的函数,并根据我想要的操作在第4个函数中调用它们。然而,我意识到,以这种方式执行任务,我将有6个功能,3个具有初始操作,3个调用每个操作并执行特定任务。任务是相同的 我决定用Python实现我的解决方案以适应它,我在想使用类和方法是否是个好主意。到目前为止,我的每一个解决方案都只是函数的定义,但我想改进 以下是我迄今为止的逻辑,它只显示了令我困惑的声明:Python 3 OOP调用方法,python,algorithm,oop,methods,quicksort,Python,Algorithm,Oop,Methods,Quicksort,我的目标是实现一个有3种变体的算法。我决定创建3个独立的函数,并根据我想要的操作在第4个函数中调用它们。然而,我意识到,以这种方式执行任务,我将有6个功能,3个具有初始操作,3个调用每个操作并执行特定任务。任务是相同的 我决定用Python实现我的解决方案以适应它,我在想使用类和方法是否是个好主意。到目前为止,我的每一个解决方案都只是函数的定义,但我想改进 以下是我迄今为止的逻辑,它只显示了令我困惑的声明: class InitialAction: def __init__(self, a,
class InitialAction:
def __init__(self, a, b):
self.a = a
self.b = b
@staticmethod
def f1(a, b):
...
@staticmethod
def f2(a, b):
...
@staticmethod
def f3(a, b):
...
class Implement(self, a, b):
def __init__(self, a, b):
self.a = a
self.b = b
def f4_1(?)
some_how_call_f1??
...
def f4_2(?)
some_how_call_f2??
def f4_3(?)
some_how_call_f3??
而且,我也不确定是否有比在{class InitialAction}的每个方法中使用a,b更有效的方法,因为它们是相同的。首先,基于类的方法,尽管它似乎没有必要
class InitialAction:
def __init__(self, a, b):
self.a = a
self.b = b
def f1(self):
...
def f2(self):
...
def f3(self):
...
def f4(f, a, b):
...
x = InitialAction(some_a, some_b)
f4(x.f1) # Implement f4 using f1
f4(x.f2) # Implement f4 using f2
f4(x.f3) # Implement f4 using f3
您不需要InitialAction的原因是因为它所做的只是保存a和b的值,您可以自己直接传递给f4。相反,只需分别定义所有四个函数,f4的主体将在适当的时候使用f
def f1(a, b):
...
def f2(a, b):
...
def f3(a, b):
...
def f4(f, a, b):
# Pass a and b to f when appropriate
...
除了调用第一个类中定义的方法之外,绝对没有理由创建另一个包含三个方法的类,这些方法没有任何功能 假设您实际上只需要一个包装器就可以了,下面的方法就可以了:
class InitialAction:
@staticmethod
def f1(a, b):
...
@staticmethod
def f2(a, b):
...
@staticmethod
def f3(a, b):
...
class Implement(object):
def __init__(self, a, b):
self.a = a
self.b = b
def callFn(self, fn):
...
fn(self.a, self.b)
...
myobj = Implement('a', 'b')
myobj.callFn(InitialAction.f1)
你的问题是什么?f4_1、f4_2和f4_3除了调用f1、f2或f3中的哪一个之外,还有什么不同吗?如果不是,您只需要一个f4,它将函数作为参数。此外,只有静态方法的类不需要uu init uu,因为静态方法不使用属性。与Java不同,如果不需要,您不必使用类;只包含定义的解决方案没有错,事实上,在许多情况下这是需要努力的。Q1:如何从类InitialAction中调用实现中的方法?问题2:我是否应该每次在类内的方法定义中使用a、b?回答@chepner,无论使用哪种方法,f4中的操作都是相同的。