This repository has been archived on 2026-10-10. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
vehicle_oop_example/fleet.py
T

106 lines
3.8 KiB
Python

from abc import ABC, abstractmethod
# ABC is imported from the standard library since Python does not natively support abstract methods and classes.
class Fleet():
vehicles = ["7E19H2", "N9460G32581A3", "BN4681"]
def __init__(self, vtype, movspeed, travelmed, vehicleid):
self.vehicletype = vtype
self.movementspeed = movspeed
self.travelmedium = travelmed
self.uuid = vehicleid
def displayAllFleetMembers(self):
for i in self.vehicles:
print(i)
def displayVehicleType(self):
print(self.vehicletype)
def addVehicles(self, newVehicleId):
self.vehicles.append(newVehicleId)
# vehicle1 = Fleet("car", 120, "ground", Fleet.vehicles[0])
# vehicle1.displayAllFleetMembers()
# addVehicle = Fleet("hovercraft", 50, "ground/water", 0)
# vehicle1.displayAllFleetMembers()
class Vehicle(ABC):
'''Defines the properties of vehicles'''
# https://www.geeksforgeeks.org/inheritance-and-composition-in-python/
@abstractmethod
def __init__(self, _gpsPosition, _velocity, _weight, _velocityType, _weightType, _status):
self.vehicleObject = Fleet()
self.gpsPosition = _gpsPosition
self.velocity = _velocity
self.velocityType = _weight
self.weightType = _velocityType
self.weight = _weightType
self.status = _status
class GroundVehicleInterface(ABC):
'''Resource on Python interfaces. This is duck typed. https://realpython.com/python-interface/ Interfaces make a contract that a method must be implemented if an interface is inherited and allows differing implementations of the same method.'''
@abstractmethod
def travel(self):
Vehicle.velocity = self.moveGroundVehicle
print("Traveling")
class GroundVehicle(Vehicle, GroundVehicleInterface):
@abstractmethod
def __init__(self, volume):
# default value set to true. Many ground vehicles will have trailers or train cars. Modified as needed
self.isModular = True
self.moveGroundVehicle = float(input())
class RoadVehicle(GroundVehicle):
@abstractmethod
def __init__(self, _axlecount):
self.axleCount = _axlecount
class Train(GroundVehicle):
def __init__(self, _noOfCarsAttached, _locomotiveCount):
self.noOfCarsAttached = _noOfCarsAttached
self.locomotiveCount = _locomotiveCount
def displayCarCount(self):
print(self.noOfCarsAttached)
def displayLocomotiveCount(self):
print(self.locomotiveCount)
def travel(self):
print("Speed 60mph, Direction E")
Train1 = Train(20, 2)
Train1.displayCarCount()
Train1.displayLocomotiveCount()
# At this point, my code should print out the values from the car count and the locomotive count. Further demonstration of abstract and concrete classes to follow.
# Always encapsulate parent constructors into child classes to make those variables available
class semi_Truck(RoadVehicle):
def __init__(self, _noOfTrailersAttached, _axlecount):
self.noOfTrailersAttached = _noOfTrailersAttached
# super in Python returns an object representing the parent class and
super().__init__(_axlecount)
# Don't modify passed in values unless absolutely necessary
def displaySemiAttributes(self):
print(self.noOfTrailersAttached, self.axleCount)
def travel(self):
print(Vehicle.status)
Semi_Truck1 = semi_Truck(f"This truck has {2} trailers attached", f"and {4} axles.")
# Remember to be careful to check that you are running the method on an instance of the class, not on the class definition.
Semi_Truck1.displaySemiAttributes()
# Next - implement abstracted methods and constructor classes. Demonstrate use of super if Python supports it.