【发布时间】:2014-01-31 07:12:40
【问题描述】:
我有一个问题,解决方案似乎是创建一个类。但是,这个类中的所有方法都是静态的,我只会实例化一次类,所以我想知道使用类是否是正确的方法。
更具体地说,我希望有一个单独的模块来存储一些函数和一些变量,它们本质上是程序的骨架。这些函数和变量取决于定义我的模型的一些参数(并且我不想将这些参数作为参数传递,因为我可能会在以后指定相关的其他原因)。例如:
# 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 将是静态的,因此在此类中的所有其他定义中都会发生。那么有没有其他更合适的方法来实现我想要的,或者我只是“反应过度”和/或完全误解了 Python 中类的使用?
【问题讨论】:
-
如果
V使用m和k成员,为什么它会是静态的? -
@VaughnCato 因为我不需要也不想将
self传递给它。然后我可以创建一个class Model,在其中我将m和k定义为类(而非实例)变量。这对我来说确实有点奇怪,这就是为什么我不愿意来这里询问这是否是正确的做法......但它确实有效。
标签: python class project-structuring