假设我在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()
但令我困扰的是,我必须在CoolCar
的定义中两次写TerribleTank
。所以我尝试了这个:
class TerribleTank(CoolCar):
class Wheels(super().Wheels):
def __init__(self):
self.s = "I'm square!!"
哪个不起作用。现在,我知道它不起作用,因为super()
正在寻找第一个参数self
/ cls
来开始搜索。
所以最后我的问题是:这样的东西是否有效,所以我不需要明确写出第二个CoolCar
?
答案 0 :(得分:2)
怎么样:
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(TerribleTank.Wheels):
def __init__(self):
self.s = "I'm square!!"
>>> TerribleTank.myWheels()
I'm square!!
基本上当你在CoolCar
中继承TerribleTank
时,你设置TerribleTank.Wheels
作为对CoolCar.Wheels
的引用,直到你用它自己的新定义来影响它。 TerribleTank
定义。因此,我相信这符合您在TerribleBank定义中没有CoolCar
两次的期望☺
HTH