Я изучаю шаблоны проектирования и лучшие практики , особенно по состав класса ( см. Мой старый вопрос ).У меня есть конкретный пример , где мне было очень сложно реализовать хороший ООП проект для.
Простой (?) Пример:
Произнесите концепцию гаража, в котором находятся автомобили, и позвоните во внешнюю службу, чей ответ дает информацию о каждом автомобиле, имеющемся в гараже.
Это пример ответа, который я хочу записать и создать классы для:
[{'carID': '1x148i-36y5-5rt2',
'carDimensions': {'top': 275,
'left': 279,
'width': 75,
'height': 75},
'carAttributes': {'weight': {'weightLevel': 'medium',
'value': 1.6},
'topSpeed': {'sppedLevel': 'good',
'value': 0.7},
'noise': {'noiseLevel': 'low',
'value': 0.32},
'accessories': [{'optionsLevel': 'poor',
'quality': 2.8}]}},
{'carID': '223a3-33e5-4ea3',
'carDimensions': {'top': 241,
'left': 234,
'width': 71,
'height': 65},
'carAttributes': {'weight': {'weightLevel': 'light',
'value': 1.1},
'topSpeed': {'sppedLevel': 'great',
'value': 1.6},
'noise': {'noiseLevel': 'high',
'value': 0.97},
'accessories': [{'optionsLevel': 'great',
'quality': 3.2}]}}]
Ниже приведен мой подход к проектированию классов.
Я попытался создать класс Car
который извлекает каждое поле следующим образом:
class `Car`:
def __init__(self, car_response_dictionary):
self.car = car_response_dictionary
def get_carID(self):
return self.car.get("carID")
# etc.
и другой класс для обработки некоторых вычислений на основе carDimensions
:
class Size:
def __init__(self, top, left, width, height):
self.top = top
self.left = left
self.width = width
self.height = height
def get_coordinates(self):
bottom = self.left + self.height
right = self.top + self.width
return (self.left, self.top), (bottom, right)
и класс для захвата концепции гаража, которыйсодержит список Car
объектов:
class Garage:
def __init__(self, datestamp, cars):
self.datestamp = datestamp
self.cars = cars
# do stuff based on cars
Итак, моя идея состоит в том, чтобы создать экземпляр Garage
и получить список ответов в cars
, я пытаюсь распаковать каждую машину какCar
объект экземпляра путем итерации по списку cars
словарей и -использования композиции класса - создайте экземпляр Car
для каждого автомобиля.
На данный момент я считаю невозможным реализовать свой дизайн на Python иЯ думаю, что, возможно, виноват подход в моем дизайне или мое плохое понимание состава классов.
Если бы кто-то мог предоставить простую реализацию кода для приведенного выше примера, это было бы очень полезно для меня,Даже если это означает, что предлагается новый дизайн (например, я собирался создать класс Response
).