是否可以在类中定义函数

时间:2014-02-02 20:28:09

标签: python function

当我尝试在类中定义函数时,我的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>

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

我的主要计划是:

from dev import *
A=real()
C=A.func1(x)

不幸的是,似乎没有工作'我有相同的追溯错误。 谢谢。

2 个答案:

答案 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