Python 一类中的抽象算法和未知输入数

Python 一类中的抽象算法和未知输入数,python,algorithm,class,parameter-passing,Python,Algorithm,Class,Parameter Passing,我试图编写一个抽象算法类,但我不知道如何管理多个算法 class Algorithm: def __init__(self, x_init): self.x = x_init def run(self, n_it): for it in range(n_it): self.x = self.T(self.x) def T(self, x): pass 它包括在n_It迭代期间运行我的算法。

我试图编写一个抽象算法类,但我不知道如何管理多个算法

class Algorithm:

    def __init__(self, x_init):
        self.x = x_init

    def run(self, n_it):
        for it in range(n_it):
             self.x = self.T(self.x)

    def T(self, x):
         pass
它包括在n_It迭代期间运行我的算法。我的问题是,有些算法有超参数,所以,我怎么能包含它们呢?此外,有些算法使用过去x_{n-1}中的一个步骤,我会

self.x=self.T(self.x,self.x_过去)
但这不适用于此设置。你认为最好的解决方案是什么

T可能不在课堂上,但我在课堂上更符合逻辑。我使用算法作为一个抽象类,通过定义T为我的每个算法创建子类。也许有一种更有效的方法

我可能可以使用
*args
*kwargs
。而且,因为我把x作为一个属性,所以我可以写

def T(自身):
通过

直接在T中修改,它可能在python方式中更符合逻辑,但从数学的角度来看,它有点不太符合逻辑。您对改进我的代码和解决我的问题有什么建议吗?

您在这里尝试使用函数式编程技术。将OO设计置于其周围会产生代码,但没有实际的好处。以下是代码的简单版本:

def run (x, n_it, t):
    for it in range(n_it)
         x = t(x)
    return x
现在,如果有人想用元参数做一些事情,他们可以传递一个闭包

def setup_t(parameters):
    prev_x = 0
    def t (x):
        answer = ... # do something with parameters and x
        nonlocal prev_x = x
        return answer
    return t

因此,调用方可以在设置中处理元参数,并在需要时跟踪前一个或三个值。他们比你更了解他们必须处理的复杂性,所以让他们自己去做。

你在这里尝试使用函数式编程技术。将OO设计置于其周围会产生代码,但没有实际的好处。以下是代码的简单版本:

def run (x, n_it, t):
    for it in range(n_it)
         x = t(x)
    return x
现在,如果有人想用元参数做一些事情,他们可以传递一个闭包

def setup_t(parameters):
    prev_x = 0
    def t (x):
        answer = ... # do something with parameters and x
        nonlocal prev_x = x
        return answer
    return t

因此,调用方可以在设置中处理元参数,并在需要时跟踪前一个或三个值。他们比你更了解他们必须处理的复杂性,所以让他们自己去做。

我不确定是否理解(但这似乎很好)。假设我想迭代以下等式:x{n+1}=\alpha*x{n+(1-\alpha)*x{n-1}我如何处理您的设置?另一个例子是x_{n+1}=x_n+1/n**2@NM36老实说,我会花一些时间学习,只使用函数技术。因此,与其试图构建一个框架来从外部传递一个算法,不如将一个范围传递给一个算法并返回一个生成器。假设我想迭代以下等式:x{n+1}=\alpha*x{n+(1-\alpha)*x{n-1}我如何处理您的设置?另一个例子是x_{n+1}=x_n+1/n**2@NM36老实说,我会花一些时间学习,只使用函数技术。因此,与其试图构建一个框架来从外部传递一个算法,不如将一个范围传递给一个算法并返回一个生成器。