Python类和函数

时间:2014-02-02 21:13:28

标签: python

我在我的课程中定义了一个函数,但是当我将这个函数调用到我的主程序中时:

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)

不幸的是我收到了这个错误:

Traceback (most recent call last):
  File "PBC.py", line 4, in <module>
    C=A.func1(0.2)
AttributeError: real instance has no attribute 'func1'

当我没有在我的班级中包含该功能时,我的参数无法识别,我收到了这个错误:

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'

我该怎么做才能避免这一切?谢谢你的回答。

2 个答案:

答案 0 :(得分:3)

如果您只修复缩进,则上面的代码会运行:

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

A=real()
C=A.func1(5)

答案 1 :(得分:0)

您有缩进错误。从def func1开始的行应与def __init__对齐。