, пожалуйста, помогите мне понять концепцию множественного наследования здесь, в Python ( Я из C# фона, который не поддерживает множественное наследование ).
Я использую Python 3.7.6 .
В приведенном ниже коде класс Apple
наследует классы ToyFruit
, NaturalFruit
, FakeFruit
и RoboticFruit
. В то время как ToyFruit
, NaturalFruit
и FakeFruit
наследуют Fruit
базовый класс, RoboticFruit
имеет другой BaseClass
Robot
.
Я заметил, что RoboticFruit
и Robot
вообще не вызывают.
class Fruit:
def __init__(self, name):
print("This is the Fruit __init__ function")
self.test = "BaseClass"
self.name = name
print("Fruit object created")
class NaturalFruit(Fruit):
def __init__(self, name):
print("This is the NaturalFruit __init__ function")
super().__init__(name)
self.type = "Natural"
print("This is a Natural Fruit")
self.test = "NaturalClass"
print("Natural Fruit object created")
class FakeFruit(Fruit):
def __init__(self, name):
print("This is the FakeFruit __init__ function")
super().__init__(name)
self.type = "Fake"
print("This is a Fake Fruit")
self.test = "FakeClass"
print("Fake Fruit object created")
class ToyFruit(Fruit):
def __init__(self, name):
print("This is the ToyFruit __init__ function")
super().__init__(name)
self.type = "Toy"
print("This is the Toy Fruit")
self.test = "ToyClass"
print("Toy Fruit object created")
class Robot:
def __init__(self, name):
print("This is the ROBOT __init__ function")
self.test = "RobotClass"
self.name = name
print("Robot object created")
class RoboticFruit(Robot):
def __init__(self, name):
super().__init__("RoboticFruit")
print("Robotic Fruit")
class Apple(ToyFruit, NaturalFruit, FakeFruit, RoboticFruit):
def __init__(self):
super().__init__("Apple")
print("Apple object created")
apple = Apple()
# print(apple.name)
print(apple.test)
ВЫХОД: -
This is the ToyFruit __init__ function
This is the NaturalFruit __init__ function
This is the FakeFruit __init__ function
This is the Fruit __init__ function
Fruit object created
This is a Fake Fruit
Fake Fruit object created
This is a Natural Fruit
Natural Fruit object created
This is the Toy Fruit
Toy Fruit object created
Apple object created
ToyClass
Если я поменяю заказ на
class Apple(RoboticFruit, ToyFruit, NaturalFruit, FakeFruit):
Затем ToyFruit
, NaturalFruit
, FakeFruit
и Fruit
__init__
методы вообще не вызываются. Я не понимаю, почему конструкторы класса RoboticFruit
пропускаются.