#!/usr/bin/env python
"""
    Variable Multiple Inheritance.
    email: kendy@kendy.org

    A boat has a body and is powered by any combination 
    of Battery and/or Solar and/or Gas or None.

    If a boat is powered, it should have only one emergency_shutoff.
"""

class Body:
    """ A boat has a body """
    def __init__(self, length):
        self.length = length


class Power:
    """ 
        Super Base class
        If a boat is powered. 
    """
    def __init__(self, emergency_shutoff):
        self.emergency_shutoff = emergency_shutoff

    def Emergency():
        emergency_shutoff = True


class Battery(Power):
    """ sub Child class """
    def __init__(self, emergency_shutoff, battery_volt):
        self.battery_volt = battery_volt
        Power.__init__(self, emergency_shutoff)

    def ChargeBattery():
        pass

class Solar(Power):
    """ sub Child class """
    def __init__(self, emergency_shutoff, solar_volt):
        self.solar_volt = solar_volt
        Power.__init__(self, emergency_shutoff)

    def DoSomethingSolar():
        pass

class Gasoline(Power):
    """ sub Child class """
    def __init__(self, emergency_shutoff, liters):
        self.liters = liters
        Power.__init__(self, emergency_shutoff)

class Boat1(Body):
    """ Sailboat """
    pass

class Boat2(Body, Gasoline, Battery):
    """ Gas, with battery backup powered """
    def __init__(self, length, emergency_shutoff, liters, battery_volt):
        Body.__init__(self, length)
        Power.__init__(self, emergency_shutoff)
        Gasoline.__init__(self, emergency_shutoff, liters)
        Battery.__init__(self, emergency_shutoff, battery_volt)

class Boat3(Body, Battery, Solar):
    """ Electric powered """
    def __init__(self, length, emergency_shutoff, solar_volt, battery_volt):
        Body.__init__(self, length)
        Power.__init__(self, emergency_shutoff)
        Solar.__init__(self, emergency_shutoff, solar_volt)
        Battery.__init__(self, emergency_shutoff, battery_volt)


def ShowAssembly(assembly_queue):
    for workon in assembly_queue:
        pass


def main():
    """ Acts like a container class"""
    assembly_queue = []  # A list of boats to be assembled, in order.

    assembly_queue.append(Boat2(30, False, 'half-full', 50))
    assembly_queue.append(Boat3(25, False, 30, 10))
    assembly_queue.append(Boat1(20))

    ShowAssembly(assembly_queue)


if __name__ == '__main__': 
    main()

