假设我在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
? 最佳答案
关于什么:
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
的期望,☺高温超导