将类实例方法传递给Python中的另一个函数(2.7)

时间:2014-04-02 10:36:41

标签: python

抱歉,如果标题没有意义,我对此比较陌生。这是我的代码:

class MeanFlow:
    def __init__(self, V0=1):
        self.V0 = V0
    def LHS(self, t, y):
        return y[0]*self.V0


def velocity_field(w,f):
    z = 0 # dummy 
    u = f(z,w).real
    v = -1*f(z,w).imag 
    return u, v

w0 = 1
mean = MeanFlow()
dwdz = mean.LHS
print(velocity_field(w0, dwdz))

但我收到错误TypeError: 'int' object has no attribute '__getitem__'

我的问题是我如何将这个函数传递给另一个函数,这是我的类实例的一个方法。如果我在类之外定义函数并将其传递给另一个函数,这可以工作但不是我想要的。谢谢!

修改:错误return = y[0]*self.V0已更正。

2 个答案:

答案 0 :(得分:3)

生成TypeError: 'int' object has no attribute '__getitem__'的原因是:

y[0]

这是因为此时y的值为1,为整数,而y[0]的行为就好像y是一个列表或string(__getitem__是调用列表中的项目的方法)。如果y是一个列表(例如y = [1]),那么它可以正常工作。

如果您删除[0],则表示您正在营业:

class MeanFlow:
    def __init__(self, V0=1):
        self.V0 = V0
    def LHS(self, t, y):
        return y*self.V0


def velocity_field(w,f):
    z = 0 # dummy 
    u = f(z,w).real
    v = -1*f(z,w).imag 
    return u, v

w0 = 1
mean = MeanFlow()
dwdz = mean.LHS
print(velocity_field(w0, dwdz))

答案 1 :(得分:2)

您的代码中存在错误。 您将1作为第一个参数传递给velocity_field,后者又将其作为第二个参数(LHS)传递给y。最后,您通过执行__getitem__y上致电y[0],这会引发异常。

此外,将结果分配给return时会出现语法错误。