У меня есть данные в форме dict (поступающие из базы данных MongoDB через PyMongo), например:
car = {_id: "1", "color": "silver", "steering_wheel":"2"}
, где значение "ering_wheel "- это идентификатор другого документа в моей базе данных, который представляетэкземпляр класса SteeringWheel.Загрузка из БД в Python приведет к:
steering_wheel = {_id: "2", "cover": "plastic"}
Для работы с данными я использую классы Python.Теперь мой вопрос о ленивой загрузке.Я могу думать о двух способах:
1) Сохранять ссылочный идентификатор и создавать другой атрибут только времени выполнения для прямого доступа к ссылочным объектам:
class Car(object):
def __init__(self, _id, color, steering_wheel_ref_id, session):
self._id = _id
self.color = color
self.steering_wheel_ref_id = steering_wheel_ref_id
self.session = session
@property
def steering_wheel(self):
try:
return self.steering_wheel
except AttributeError:
# Get the referecend object from the session
self.steering_wheel = self.session.resolve_item_refs(self.steering_wheel_ref_id)
return self.steering_wheel
2) Другой вариант - выполнитьпроверка типа:
class Car(object):
def __init__(self, _id, color, steering_wheel, session):
self._id = _id
self.color = color
self.steering_wheel = steering_wheel
self.session = session
@property
def steering_wheel(self):
if isinstance(self.steering_wheel, SteeringWheel):
return self.steering_wheel
else:
# Get the referecend object from the session
self.steering_wheel = self.session.resolve_item_refs(self.steering_wheel_ref_id)
return self.steering_wheel
Какой способ вы бы предпочли?Или есть лучшие способы / лучшие практики для разрешения доступа к ссылкам по идентификатору?