Python 结构——我真的需要一个类吗?

标签 python class project-structuring

我有一个问题,解决方案似乎是创建一个类。但是,这个类中的所有方法都是静态的,而且我只会实例化该类一次,所以我想知道使用类是否是正确的方法。

更具体地说,我想要一个单独的模块来存储一些函数和一些变量,这些函数和变量本质上是程序的骨架。这些函数和变量取决于定义模型的一些参数(并且我不想将这些参数作为参数传递,原因是我稍后可能会在相关时指定)。例如:

# 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/

相关文章:

php - PDO 将类获取为分组集合对象,而不是数组中的单个对象

java - 查看嵌入在 jar 文件中的 .class 文件中的方法 |可能吗 ?

jQuery 将编号类递归添加到 div block

python - forms.py 文件应位于何处?

python - 导入 numpy 时未定义“arange”

java - 我有多少余地来学习一门新语言?

java - 如何在一个项目中使用不同的语言

python - 在 python 3.5 中使用 itertools,如何仅创建某些列表的某些变体,但创建其他列表的所有变体?

python - 如何检查名字和姓氏是否为英文?