gpt4 book ai didi

python - 使用 Python 进行延迟加载的模式

转载 作者:搜寻专家 更新时间:2023-10-30 20:06:18 24 4
gpt4 key购买 nike

我有字典形式的数据(通过 PyMongo 来自 MongoDB 数据库),例如:

car = {_id: "1", "color": "silver", "steering_wheel":"2"}

其中“steering_wheel”的值是我数据库中另一个文档的 ID,它表示类 SteeringWheel 的一个实例。从数据库加载到 Python 将导致:

steering_wheel = {_id: "2", "cover": "plastic"}

为了处理数据,我使用 Python 类。现在,我的问题是关于延迟加载的。我可以想到两种方法:

1) 保留引用的 id 并创建另一个仅运行时的属性以直接访问引用的对象:

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

你更喜欢哪种方式?或者是否有更好的方法/最佳实践来解决通过 ID 访问引用?

最佳答案

这个怎么样?

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
self._steering_wheel = None

@property
def steering_wheel(self):
if self._steering_wheel is None:
# Get the referecend object from the session
self._steering_wheel = self.session.resolve_item_refs(self.steering_wheel_ref_id)
return self._steering_wheel

关于python - 使用 Python 进行延迟加载的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5807711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com