Python 3.x 如何使用派生类中基类的两个实例

Python 3.x 如何使用派生类中基类的两个实例,python-3.x,inheritance,Python 3.x,Inheritance,我想使用一个派生类的两个基类实例。我不确定以下代码在技术上是否正确,或者是否有更好的方法。这两种情况在任何情况下都会混淆吗 基类A用于执行一个公共任务:“changevar”,它将变量“var”更改为“dv”。派生类B使用此方法,但使用两个变量“var1”、“var2”将其分别更改为“dv1”和“dv2”。然后,类B对已更改的变量“var1”和“var2”执行“操作”,并返回结果(在本例中为乘法) 在代码中,实际上并没有使用继承 当您执行self.inst1=A(self.var)时,您正在创建

我想使用一个派生类的两个基类实例。我不确定以下代码在技术上是否正确,或者是否有更好的方法。这两种情况在任何情况下都会混淆吗

基类A用于执行一个公共任务:“changevar”,它将变量“var”更改为“dv”。派生类B使用此方法,但使用两个变量“var1”、“var2”将其分别更改为“dv1”和“dv2”。然后,类B对已更改的变量“var1”和“var2”执行“操作”,并返回结果(在本例中为乘法)


在代码中,实际上并没有使用继承

当您执行
self.inst1=A(self.var)
时,您正在创建一个全新的A安装,它不同于B的基础安装,并将其分配给一个字段

好消息是:在您的案例中,您不需要继承。您需要(事实上也需要)的是组合—在您的类型B中具有类型A的字段

只需从B中删除A作为基,并使用此类型的内部字段,结果将是相同的:

A类:
定义初始化(自,变量):
self.var=var
def changevar(自身,dv):
self.var=self.var+dv
def getvar(self):
返回self.var
B类:
定义初始化(self,var1,var2):
self.inst1=A(var1)
self.inst2=A(var2)
def操作(自):
dv1=2
dv2=-2
自安装1.changevar(dv1)
自安装2.changevar(dv2)
var1=self.inst1.getvar()
var2=self.inst2.getvar()
返回var1,var2,var1*var2
def main():
测试=B(10,10)
v1、v2、v3=测试操作()
打印(v1、v2、v3)
返回
如果名称=“\uuuuu main\uuuuuuuu”:
main()
当您希望像使用类型A的实例一样使用类型B的实例时,应该使用继承(例如,对类型B的实例调用A的方法)。 一般来说,我们说B应该从A继承,ib B“是-A”A-例如狗是动物,正方形是形状。 构图更多的是“有-有”关系,就像汽车有收音机一样


我希望我说得很清楚,对于像a和B这样没有意义的类名来说,理解这种推理有点困难:)

在代码中,实际上并没有使用继承

当您执行
self.inst1=A(self.var)
时,您正在创建一个全新的A安装,它不同于B的基础安装,并将其分配给一个字段

好消息是:在您的案例中,您不需要继承。您需要(事实上也需要)的是组合—在您的类型B中具有类型A的字段

只需从B中删除A作为基,并使用此类型的内部字段,结果将是相同的:

A类:
定义初始化(自,变量):
self.var=var
def changevar(自身,dv):
self.var=self.var+dv
def getvar(self):
返回self.var
B类:
定义初始化(self,var1,var2):
self.inst1=A(var1)
self.inst2=A(var2)
def操作(自):
dv1=2
dv2=-2
自安装1.changevar(dv1)
自安装2.changevar(dv2)
var1=self.inst1.getvar()
var2=self.inst2.getvar()
返回var1,var2,var1*var2
def main():
测试=B(10,10)
v1、v2、v3=测试操作()
打印(v1、v2、v3)
返回
如果名称=“\uuuuu main\uuuuuuuu”:
main()
当您希望像使用类型A的实例一样使用类型B的实例时,应该使用继承(例如,对类型B的实例调用A的方法)。 一般来说,我们说B应该从A继承,ib B“是-A”A-例如狗是动物,正方形是形状。 构图更多的是“有-有”关系,就像汽车有收音机一样


我希望我说得很清楚,对于像a和B这样没有意义的类名来说,理解这种推理有点困难:)

非常感谢您的回答。它暂时解决了我的问题,并且熟悉了作文的概念。非常感谢你的回答。它暂时解决了我的问题,而且还熟悉了构图的概念。
test.py:
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(A):
    def __init__(self, var1, var2):
        self.var1 = var1
        self.var2 = var2
        A.__init__(self, var1)
        self.inst1 = A(self.var)
        A.__init__(self, var2)
        self.inst2 = A(self.var)

    def operation(self):
        dv1 = 2
        dv2 = -2
        self.inst1.changevar(dv1)
        self.inst2.changevar(dv2)
        self.var1 = self.inst1.getvar()
        self.var2 = self.inst2.getvar()
        return self.var1, self.var2, self.var1 * self.var2

def main():
    test = B(10, 10)
    v1, v2, v3 = test.operation()
    print (v1, v2, v3)
    return

if __name__ == "__main__":
    main()```

>>>python3 test.py
>>>12 8 96