Hi I tried to inheritance some code from a class :
class MathParent:
def multiply(self, number1, number2):
self.answer = number1 * number2
return self.answer
def happy(self):
return "Nice Mark!"
class MathChild(MathParent):
def plus_x(self, x) :
return self.answer x
p_out = MathParent()
print(p_out.multiply(5, 2))
print(p_out.happy())
c_out = MathChild()
print(c_out.happy())
print(c_out.plus_x(5))
that happy methods has successfully inherited, but when I access self.answer attribute, it raise error. I use another way :
return MathParent.self.answer x
And that still didn't work. Any insight will be very helpful :)
CodePudding user response:
self.answer is only declared whenever multiply is called. You can add constructors as harshraj22 states, but within the existing code, you need to call multiply before calling plus_x.
This:
c_out = MathChild()
print(c_out.happy())
c_out.multiply(1, 1)
print(c_out.plus_x(5))
runs without errors.
CodePudding user response:
self.answer variable is created only when multiply function is run.
One way to fix this is, you can use the following to make sure the variable is created once the __init__ is called:
class MathParent:
def __init__(self) -> None:
self.answer = 0
def multiply(self, number1, number2):
self.answer = number1 * number2
return self.answer
def happy(self):
return "Nice Mark!"
class MathChild(MathParent):
def plus_x(self, x) :
return self.answer x
p_out = MathParent()
print(p_out.multiply(5, 2))
print(p_out.happy())
c_out = MathChild()
print(c_out.happy())
print(c_out.plus_x(5))
