У меня есть 2 класса: Vehicle & Car.
Vehicle Class имеет словарь объектов Car и кучу.
ClassV.py:
from ClassC import Car
import heapq
class Vehicle:
MapOfCars_ID = {}
heap = [] # Stores the load factor of each car
counter = 0
def createCar(number, idnum):
C = Car(number, idnum) # Create a car object
self.MapOfCars_ID[counter] = C # Dict of Car_ID : Car Object
self.heapq.heappush(heap, (0.0, counter)) # Heap stores load factor, Car_ID
counter += 1
def AssignCar():
t = heapq.heappop(heap)
MapOfCars_ID[t[1]].addPassenger()
ClassC.py - логика для создания автомобиля:
from ClassV import Vehicle
class Car:
size = 0;
occupiedSeats = 0
carId = -1
def __init__(size, id_number):
self.size = size
self.carId = id_number
print "Created Car with size " + self.size + " and ID number "+ self.carId
def addPassenger():
if self.occupiedSeats < self.size:
self.occupiedSeats += 1
# Code below adjusts the load factor of the car in the heap when a passenger is added to the car
# Load factor = seat-occupied/total-seats-in-the-car
for index, value in Vehicle.heap:
if value[1] == self.carId:
Vehicle.heap[index] = heap[-1]
heap.pop()
t = (float(self.occupiedSeats/self.size), self.carId)
heap.append(t)
heapq.heapify(Vehicle.heap)
break
else:
print "Car is full!"
Программа запускается из другого файла, main.py:
from ClassV import Vehicle
from random import randint
def main():
for i in range(1, 10): # Create 10 cars
r = randint(1,6) # Maximum number of seats could be 6 in a car
Vehicle.createCar(r, i) # <Car size, ID>
Vehicle.AssignCar()
if __name__ == "__main__":
main()
Цель этой программы - создать 10 автомобилей, а затем назначить пассажиров на автомобиль с минимальной вместимостью.
Как видно из программы, heap
, которая является классоматрибут класса Автомобиль обновляется в классе автомобилей.И Class Vehicle создает массив объектов Car.
Это дает мне ошибку:
File "/home/Testing/ClassC.py", line 1, in <module>
from ClassV import Vehicle
ImportError: cannot import name Vehicle
Я искал вокруг, но действительно мог найти решение этой проблемы.Как правильно решить эту проблему?
Обновление: я получил несколько комментариев, которые объясняют, что это, возможно, проблема циклического импорта, и имеет 2 решения:
- Рефакторинг программы, чтобы избежать циклического импорта
- Переместить импорт в конец модуля
Я ищу отзывы о том, как мне сделать любой из этих.