假设我有两个看起来像这样的数组
import numpy as np
theta_a = np.array([[-4.0, -3.8, -3.9, -4.0, -4.0, -4.0, -5.0, -6.0, -8.0, -10.0],
[-4.1, -3.9, -3.8, -4.1, -4.0, -4.2, -4.8, -6.2, -8.1, -10.1],
[-3.9, -3.6, -3.7, -3.8, -4.1, -4.0, -4.9, -6.0, -8.2, -9.90]])
theta_b = np.array([[-0.5, -0.6, -0.5, -0.5, -0.7, -0.6, -0.9, -1.0, -1.1, -6.0],
[-0.4, -0.9, -0.8, -0.6, -0.7, -0.8, -1.0, -1.0, -1.1, -6.1],
[-0.4, -0.7, -0.7, -0.8, -0.8, -0.7, -0.9, -1.1, -1.2, -5.9]])
我想在这些列表上执行迭代器操作,并且能够通过
d_theta_zip = [b - a for a, b in zip(theta_a, theta_b)]
f_theta_zip = np.tan(np.deg2rad(d_theta_zip))
但是,出于好奇(我还没有深入研究类的领域)并且还稍微整理了一下代码,我想定义一个class
,它的作用完全相同>
class Tester:
def __init__(self, a, b):
self.a = a
self.b = b
def __call__(self):
d_theta = self.b - self.a
f_theta = np.tan(np.deg2rad(d_theta))
return f_theta
一旦我这样设置,它就可以正常工作
test = Tester(theta_a[0][0], theta_b[0][0])
其结果与
完全相同print(f_theta_zip[0][0])
话虽如此,我无法找到一种使用类似的方法遍历全班的方法
test_2 = [Tester(a, b) for a, b in zip(theta_a, theta_b)]
我最终收到以下错误消息
TypeError: 'list' object is not callable
class
的优雅方式?正如我所说,我这样做是为了更好地了解class
系统。
答案 0 :(得分:3)
好像您正在做test_2()
来调用Tester.__call__
一样,但是您需要在此处的Tester
的每个实例后面加上括号:
test_2 = [Tester(a, b)() for a, b in zip(theta_a, theta_b)]
print(test_2) # [array([0.06116262, 0.05590868, 0.05941095, ...