假设我有以下Python 3中的类:
class CoolCar:
@classmethod
def myWheels(cls):
cls.Wheels().out()
class Wheels:
def __init__(self):
self.s = "I'm round!"
def out(self):
print(self.s)
一切顺利。现在我想要一个派生类:
class TerribleTank(CoolCar):
class Wheels(CoolCar.Wheels):
def __init__(self):
self.s = "I'm square!!"
这个工作的效果符合我的期望:
CoolCar.myWheels()
TerribleTank.myWheels()
但是让我感到困扰的是,在定义 TerribleTank
时,我必须两次写入 CoolCar
。因此,我尝试了以下方法:
class TerribleTank(CoolCar):
class Wheels(super().Wheels):
def __init__(self):
self.s = "I'm square!!"
以下代码无法正常工作。现在,我知道它无法正常工作是因为super()
正在寻找第一个参数self
/cls
来开始搜索。
所以最后我的问题是:是否有类似的方法可以正常工作,这样我就不需要显式地编写第二个CoolCar
?
Wheels.foo
,并且只要有正确版本的Wheels,它就可以正常工作。更多信息,请参阅Marc Summfield的Python in Practice中的工厂模式章节。 - Steve DTerribleTank
将覆盖此Wheel类。现在,任何继承自TerribleTank
的类都会怎么样?将原始的Wheels
类放在模块级别只会将问题提升一代,而不是解决它。 - Steve D