Я изо всех сил пытаюсь понять, почему мой класс, показанный ниже, не назначает возвращаемые выходные данные метода атрибуту класса.
При доступе к моему объекту класса после выполнения моего кода я получаю сообщение об ошибке, в котором говорится, что у объекта есть атрибут, который я вызвал.В моем случае атрибут, который мне нужен, это xc и yc.Все другие атрибуты (например, x или y2 существуют и могут быть вызваны).
Я поиграл с присвоением self методам, вызываемым в классе calc_DCR, но это не сработало, и я изо всех сил пытаюсь понять, какприсвойте этот атрибут правильно.
class calc_DCRs:
def __init__(self, create_curve_class,M_demand,P_Demand):
self.M_Demand = M_demand
self.P_Demand = P_Demand
self.x =np.array(create_curve_class.P_Cap_run)
self.y1 =np.array(create_curve_class.M_run)
self.y2 = self.M_Demand/self.P_Demand*self.x
def interpolated_intercept(x, y1, y2):
def line(p1, p2):
A = (p1[1] - p2[1])
B = (p2[0] - p1[0])
C = (p1[0]*p2[1] - p2[0]*p1[1])
return A, B, -C
def intersection(L1, L2):
D = L1[0] * L2[1] - L1[1] * L2[0]
Dx = L1[2] * L2[1] - L1[1] * L2[2]
Dy = L1[0] * L2[2] - L1[2] * L2[0]
x = Dx / D
y = Dy / D
return x,y
L1 = line([point1[0],point1[1]], [point2[0],point2[1]])
L2 = line([point3[0],point3[1]], [point4[0],point4[1]])
R = intersection(L1, L2)
return R
idx = np.argwhere(np.diff(np.sign(y1 - y2)) != 0)
xc, yc = intercept((x[idx], y1[idx]),((x[idx+1], y1[idx+1])), ((x[idx], y2[idx])), ((x[idx+1], y2[idx+1])))
return xc, yc
x_temp , y_temp = interpolated_intercept(self.x, self.y1, self.y2)
self.xc = x_temp
self.yc = y_temp
#self.xc , self.yc = interpolated_intercept(self.x, self.y1, self.y2)
edit: я пытался воссоздать проблему, используя простое определение класса, но это дает желаемые результаты:
class foo:
def __init__(self, values):
self.mod_val=values*2
def do_it():
return 5 , 4
x_temp , y_temp = do_it()
self.x = x_temp
self.y = y_temp
test1=foo(5)
print(test1.mod_val)
print(test1.x)
Я изо всех сил пытаюсь увидетьразличия между этими двумя примерами.