scipy 抽象方法参数和可读性

t98cgbkg  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(141)

我正在创建一个抽象基类,它的公共方法要求子类用特定的参数来实现抽象方法。除了写一个注解,我如何写抽象方法函数定义来指示子类应该在抽象方法本身中有特定的参数?
我编写这样一个抽象方法的原因是因为公共方法调用scipy.optimize.curve_fit,它将一个可调用对象作为参数,并且该可调用对象本身必须在其定义中具有某些参数。
下面是一些伪代码:

from abc import ABC, abstractmethod
from scipy.optimize import curve_fit 

class DiseaseModel(ABC):

  def fit(self, t, ydata):
    return curve_fit(self._fit, t, ydata)

  @abstractmethod
  def _fit(self, t, modelParam1, modelParam2, ..., modelParamN):
    """Method fits parameters of a model to data.

    This method MUST have `t` (which is just timesteps over which a
    certain ydata occurred) AND any other parameters relevant for the
    model of the system.  Should I maybe just use `*args` or `**kwargs`
    in the function definition?

    For example, if a child class is for a simple 
    SIR epidemic model, then the function definition should be
    `def _fit(self, t, beta, gamma)`. 

    Likewise, for a child class
    defining a demographic SIR model, the function definition should be
    `def _fit(self, t, beta, gamma, mu)`.
    """
    pass
deikduxw

deikduxw1#

嗯,你的问题并不十分清楚。
抽象方法是由开发人员根据自己的需要重写的。根据您需要与未来的开发人员交流的内容,我会推荐一些可能对您有帮助的东西。请记住,您只能做这么多,您应该考虑到开发人员也可以自己思考和解决某些问题。尽管如此,以下是我的建议:

  • 为预期的参数和函数返回类型添加类型。如果这样做,对于依赖于fit函数的其他非抽象函数,它们将引发类型错误,并在一定程度上强制fit函数的特定实现。
  • 请看一下This Solution!到非法参数。如果需要,您可以创建显式值错误,并在类的其他非抽象函数中引发该错误以强制执行标准。
  • 保留docstring以清楚地定义您的期望。假设人们正在使用IDE,他们将被告知这些期望。
  • 更新并在您的文档中提及这一点,如Readme、confluence wiki等。

同样,你能做的只有这么多来传达这一点;)

相关问题