Метод класса - назначение атрибутов из возврата - PullRequest
0 голосов
/ 26 сентября 2019

Я изо всех сил пытаюсь понять, почему мой класс, показанный ниже, не назначает возвращаемые выходные данные метода атрибуту класса.

При доступе к моему объекту класса после выполнения моего кода я получаю сообщение об ошибке, в котором говорится, что у объекта есть атрибут, который я вызвал.В моем случае атрибут, который мне нужен, это 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)

Я изо всех сил пытаюсь увидетьразличия между этими двумя примерами.

...