当我尝试在类中定义函数时,我的python代码特别有问题。实际上,我想在我的主程序中调用此函数(在我称为BC.py的文件中),我称之为PBC.py
Class BC():
self.nmodes
self.L_ch
self.w
def func1(self,x):
self.k_ch=self.nmodes*self.L_ch*self.w
f=x**3+4*x*self.k_ch+15*self.k_ch
return f
在我的主程序中,我做了:
from BC import *
A=BC()
C=func1(self,x)
然后我收到了这个错误:
The parameters file have been imported succesfully
Traceback (most recent call last):
File "PBC.py", line 35, in <module>
C =func1(A,eps)
NameError: name 'func1' is not defined
请你知道我哪里错了吗? 问题是,当我在课堂上不包含该功能时,一切运作良好,
Class BC():
self.nmodes
self.L_ch
self.w
def func1(self,x):
self.k_ch=self.nmodes*self.L_ch*self.w
f=x**3+4*x+15
return f
当我只使用该功能时,我不能识别我之前定义的所有参数??? 例如:
r_0=scipy.optimize.fsolve(func1,0.003,args=(0.032))
我收到了这个错误:
The parameters file have been imported succesfully
Traceback (most recent call last):
File "PBC.py", line 75, in <module>
R_0=scipy.optimize.fsolve(func1,float(eps_real),args=(eps))
File "/usr/local/lib64/python2.7/site-packages/scipy/optimize/minpack.py", line 127, in fsolve
res = _root_hybr(func, x0, args, jac=fprime, **options)
File "/usr/local/lib64/python2.7/site-packages/scipy/optimize/minpack.py", line 183, in _root_hybr
_check_func('fsolve', 'func', func, x0, args, n, (n,))
File "/usr/local/lib64/python2.7/site-packages/scipy/optimize/minpack.py", line 14, in _check_func
res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
File "/home/cfd1/ndiaye/ATACAMAC/BCT_dev.py", line 75, in func1
self.k_ch=self.nmodes*self.pi/self.L_ch+eps/self.L_ch
AttributeError: 'numpy.ndarray' object has no attribute 'nmodes'
有人可以帮忙吗? 非常感谢你。
感谢您的回答,但它无效,我仍然遇到此错误:
Traceback (most recent call last):
File "PBC.py", line 36, in <module>
现在我正在尝试使用非常简化的脚本:
class real :
def __init__(self):
self.nmodes = 4
self.L_ch = 1
self.w = 2
def func1(self,x):
self.k_ch=self.nmodes*self.L_ch*self.w
f=x**3+4*x*self.k_ch+15*self.k_ch
return f
我的主要计划是:
from dev import *
A=real()
C=A.func1(x)
不幸的是,似乎没有工作'我有相同的追溯错误。 谢谢。
答案 0 :(得分:0)
以这种方式调用函数(推荐):
A = BC()
C = A.func1(x)
或其他(较少使用且不推荐,仅作为信息提及):
C = BC.func1(A, x)
注意:我建议您使用与BC
类不同的名称重命名文件,因为它会混淆Python。另外,不要忘记宣布x
。
答案 1 :(得分:0)
你应该这样称呼它:
from BC import *
A=BC()
C=A.func1(x)
编辑评论:
请注意代码格式:
class real :
def __init__(self):
self.nmodes = 4
self.L_ch = 1
self.w = 2
def func1(self,x):
self.k_ch=self.nmodes*self.L_ch*self.w
f=x**3+4*x*self.k_ch+15*self.k_ch
return f