我有一个问题,解决方案似乎是创建一个类。但是,这个类中的所有方法都是静态的,我只会实例化这个类一次,所以我想知道使用一个类是否是正确的方法。你知道吗
更具体地说,我希望有一个单独的模块来存储一些函数和一些变量,这些基本上是程序的框架。这些函数和变量依赖于定义我的模型的一些参数(由于其他原因,我不想将这些参数作为参数传递,如果相关的话,我可能会在后面指定这些参数)。例如:
# my_model.py
def V(x):
return -m*x**2 + k*x**4
在另一个模块上,我扫描了这些参数“m”和“k”的一些值,对于这些值中的每一个,我想,比如说,找到V的最小值:
# scan.py
from scipy.optimize import minimize
import random, my_model
for i in range(5):
m = random.randint(0,10)
k = random.randint(0,10)
minimize(my_model.V, 0)
当然,这是行不通的,因为我的模型V不知道m和k是什么。如前所述,我考虑过在my\ model文件中创建一个类,定义函数V(以及其他!)并在中实例化该类扫描.py将参数“m”、“k”作为参数传递。但是,正如我所说的,我觉得这是对类特性的过度使用。例如,上面的函数V显然是静态的,这个类中的所有其他定义也是静态的。那么,有没有其他更合适的方法来实现我想要的,或者我只是“反应过度”和/或完全误解了Python中类的使用?你知道吗
我不确定我是否正确理解了你的问题,但我想我应该做的是:
1)确定V的m和k参数
2)对于固定的m和k,当你想最小化V关于x的时候,创建一个已经设置了m和k的部分函数,并最小化:
或者,生成一个函数,返回使用右m和k的V版本:
但这基本上是对functools.部分只为V
您可以使用^{} :
像这样使用:
这实际上只是作为一个类的替代。这里的口味不同,有些人建议你真的应该这样做。使用类并为不同的模型函数提供
@classmethod
对我来说也很好。你知道吗相关问题 更多 >
编程相关推荐