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

1 投票
2 回答
1582 浏览
提问于 2025-04-18 01:00

抱歉,如果标题不太清楚,我对这个还比较陌生。这是我的代码:

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 个回答

2

你的代码里有个错误。你把 1 作为第一个参数传给了 velocity_field,然后它又把这个值传给了 LHS 作为第二个参数(也就是 y)。最后,你对 y 调用了 __getitem__,也就是用 y[0],这就导致了异常。

另外,你还有个语法错误,因为你把结果赋值给了 return

3

产生这个错误 TypeError: 'int' object has no attribute '__getitem__' 的原因是:

y[0]

因为在这个时候,y 的值是 1,也就是一个整数,而 y[0] 就像在对待一个列表或字符串一样(__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))

撰写回答