В вашем коде вы фактически не используете наследование.
Когда вы выполняете self.inst1 = A(self.var)
, вы создаете совершенно новый объект A, отличный от того, который является основой для вашего B, и присваиваете его полю.
Хорошие новости: вам не нужно наследование в вашем случае. что вам нужно (и де-факто делать) - это составление - наличие полей типа A в вашем типе B.
Просто удалите A как основу из B и используйте внутренние поля этого типа, результат будет таким же:
class A:
def __init__(self, var):
self.var = var
def changevar(self, dv):
self.var = self.var + dv
def getvar(self):
return self.var
class B:
def __init__(self, var1, var2):
self.inst1 = A(var1)
self.inst2 = A(var2)
def operation(self):
dv1 = 2
dv2 = -2
self.inst1.changevar(dv1)
self.inst2.changevar(dv2)
var1 = self.inst1.getvar()
var2 = self.inst2.getvar()
return var1, var2, var1 * var2
def main():
test = B(10, 10)
v1, v2, v3 = test.operation()
print (v1, v2, v3)
return
if __name__ == "__main__":
main()
Наследование следует использовать, когда вы хотите использовать экземпляры типа B, как если бы они были типа A (например, вызывать методы A для экземпляров типа B).
Обычно мы говорим, что B должен наследовать от A, ib B "is-a" A - например, Собака - это животное, а квадрат - это форма.
Композиция - это скорее отношения "имеет-а", как у автомобиля есть радио
Надеюсь, я ясно дал понять, что это немного сложно понять с помощью бессмысленных имен классов, таких как A и B:)