我有一个问题,解决方案似乎是创建一个类。但是,这个类中的所有方法都是静态的,而且我只会实例化该类一次,所以我想知道使用类是否是正确的方法。
更具体地说,我想要一个单独的模块来存储一些函数和一些变量,这些函数和变量本质上是程序的骨架。这些函数和变量取决于定义模型的一些参数(并且我不想将这些参数作为参数传递,原因是我稍后可能会在相关时指定)。例如:
# 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)
当然,这是行不通的,因为 my_model.V 不知道 m 和 k 是什么。正如我所说,我考虑在 my_model 文件中创建一个类,在该类中定义函数 V (以及其他!),并在 scan.py 中实例化该类,传递参数“m”、“k”作为参数。但是,正如我所说,这对我来说听起来是对类功能的过度使用。例如,显然上面的函数 V 是静态的,并且此类中的所有其他定义也会发生这种情况。那么有没有其他更合适的方法来实现我想要的,或者我只是“ react 过度”和/或完全误解了 Python 中类的使用?
最佳答案
您可以使用functools.partial
:
# my_model.py
def V(m, k, x):
return -m*x**2 + k*x**4
并像这样使用它:
# scan.py
import functools
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(functools.partial(my_model.V, m, k), 0)
这实际上只是作为类的替代。这里的口味不同,有些人建议你真的应该这样做。使用类并为不同的模型函数使用 @classmethod
对我来说也很好。
关于Python 结构——我真的需要一个类吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21076069/