继承问题:AttributeError:'Vector'对象没有属性'_Vector__i'

时间:2020-03-19 20:29:10

标签: python inheritance

    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)

我收到一条错误消息,说“在 add 中,返回向量((self .__ i + o .__ i),(self .__ j + o .__ j),(self .__ k + o .__ k) )” AttributeError:“ Vector”对象没有属性“ _Vector__i”

我想创建一个具有更多属性“ k”的新子类,并将2d add方法更改为3d add方法。这个继承在哪里出错了?

1 个答案:

答案 0 :(得分:0)

__add__的{​​{1}}方法中,您无需初始化属性即可访问属性Vector__i。这就是为什么您得到错误。