我需要python在下面的程序中使用基类的方法。 我阅读了大量的文档,即使在那之后,我也无法理解当下面这种情况发生时super是如何工作的
class Car:
time = 2
def __init__(self, color, company,powertrain,velocity):
self.color = color
self.company = company
self.powertrain = powertrain
self.velocity = velocity
def speed(self):
return self.velocity
def __self__(self):
return self.powertrain #just self.powertrain to print it
class Conventional(Car):
def speed(self):
return self.velocity *self.time*2
class Electric(Car):
def __init__(self):
super().__init__()
def speed(self):
return super().velocity * super().time*3
class Hybrid(Electric,Conventional):
pass
现在我需要混合对象来使用Car类的方法,我想我可以在这里使用合成概念。但我需要知道超级是怎么运作的。我还知道mro可以获取python查找方法的顺序。先生
car = Hybrid("blue", "Audi", "hyrid", 50)
car.speed()
任何更好的编写上述代码的方法都是最受欢迎的。 我想如果我用super()得到了上述问题的解决方案,我就能正确地理解super的完整功能。 为了了解所有的可能性,我使用了不同的语法。别介意
提前谢谢
这应该起作用:
说明: super可以接受两个可选参数,即它应该使用的超类(直接超类)和它应该从中开始搜索MRO的类: MRO:混合动力->;电动->;汽车->;常规->;小型车 通过电气,我们制造MRO: 汽车->;常规->;小型车 (多重继承很糟糕) 当我们像这样解析继承时,我们还需要显式地传递当前对象(self)。 顺便说一句,你应该修复你的初始化,它们不能正确解析,你应该总是传递*参数,让超级解析参数为你
首先尝试重新组织代码。如果使用self.velocity in Car class speed方法,则不需要使用第二个参数velocity,因为在方法中不使用此参数,而是使用self.velocity,它是在init中创建的
您可以使用lambda函数将旧的speed方法“映射”到变量
尝试在混合类中创建lambda函数
然后在外面上课叫它
当您创建汽车时,混合动力车的速度将与速度变量的值相同
相关问题 更多 >
编程相关推荐