Проблема наследования: AttributeError: у объекта «Вектор» нет атрибута «_Vector__i» - PullRequest
0 голосов
/ 19 марта 2020
    class ComplexNumber:
        # setting a Debug value and will be used to ask user if they want to enter degub mode
        Debug = None
        # initiating variables, self consists of real, imag, and complex. 
        def __init__(self, real,imag):
        #The prefix __ is added to make the variable private
            self.__real = real
            self.__imag = imag
        # Overload '+','-' and '*' to make them compatible for 2 by 2 matrix operation
        def __add__(self, o): 
            return ComplexNumber((self.__real + o.__real),(self.__imag + o.__imag))
        def __sub__(self, o): 
            return ComplexNumber((self.__real - o.__real),(self.__imag - o.__imag))
        def __mul__(self,o):
            return ComplexNumber((self.__real * o.__real - self.__imag * o.__imag),\
        (self.__imag * o.__real + self.__real * o.__imag))

    # Create a child class from ComplexNumber
    class Vector(ComplexNumber):
    #inherit the property of real and image as i and j
        def __init__(self, i,j,k):
           super().__init__(i, j)
           self.k = k
        def __add__(self, o): 
           return Vector((self.__i + o.__i),(self.__j + o.__j),(self.__k + o.__k))

    A = Vector(1,0,3)
    B = Vector(1,0,3)
    print(A+B)

Я получил сообщение об ошибке "in add Return Vector ((self .__ i + o .__ i), (self .__ j + o .__ j), (self .__ k + o. __k)) "AttributeError: у объекта 'Vector' нет атрибута '_Vector__i'

Я хочу создать новый дочерний класс с еще одним свойством 'k' и изменить метод 2d add на метод 3d add. Где я ошибся с этим наследством?

1 Ответ

0 голосов
/ 19 марта 2020

В методе __add__ Vector вы получаете доступ к атрибутам __i и __j, даже не инициализируя их. Вот почему вы получаете ошибку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...