Предположим, у меня есть два массива, которые могут выглядеть примерно так:
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
.