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