如何在Python中定义一个类并对其进行遍历?

时间:2019-04-17 10:56:12

标签: python list numpy

假设我有两个看起来像这样的数组

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系统。

1 个答案:

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