Python中文
首页
教程
问答
标签
搜索
登录
注册
Python延迟加载模式
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我有dict形式的数据(通过PyMongo从MongoDB数据库获得),比如:</p> <pre><code>car = {_id: "1", "color": "silver", "steering_wheel":"2"} </code></pre> <p>其中“steering_wheel”的值是我的数据库中另一个文档的id,它表示SteeringWheel类的实例。从DB加载到Python将导致:</p> ^{pr2}$ <p>为了处理数据,我使用Python类。现在,我的问题是关于延迟加载。我可以想出两种方法:</p> <p>1)保留被引用的id并创建另一个仅用于运行时的属性,用于直接访问被引用对象:</p> <pre><code>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 </code></pre> <p>2)另一种选择是执行类型检查:</p> <pre><code>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 </code></pre> <p>你喜欢哪条路?或者,有没有更好的方法/最佳实践来解决通过id访问引用的问题?在</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>如果我必须在你的两种方法中选择一种,我会选择第一种。从使用duck类型(即“Python方式”)的角度来看,它更像Python。在</p> <p>第二个更难阅读和理解。在</p> <p>至于其他的建议,对不起,我什么也没有。:-)</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何添加虚拟方法
10 回答
如何添加表示整数的擦边字符串?
1 回答
如何添加要在Bokeh中使用的新font.ttf文件?
6 回答
如何添加要显示的矩阵XY轴编号和XY轴
2 回答
如何添加计数?
2 回答
如何添加计数器函数?
1 回答
如何添加计数器列来计算数据帧中另一列中的特定值?
9 回答
如何添加计数器来跟踪while循环中的月份和年份?
1 回答
如何添加计数并删除countplot的顶部和右侧脊椎?
9 回答
如何添加计时器wx.应用程序更新窗口对象的主循环?
4 回答
如何添加评论到帖子?PostDetailVew,Django 2.1.5
10 回答
如何添加评论拉梅尔亚姆
8 回答
如何添加诸如矩阵Python/Pandas之类的数据帧?
7 回答
如何添加谷歌地点自动完成到Flask?
2 回答
如何添加超时、python discord bot
7 回答
如何添加超过1dp的检查
6 回答
如何添加距离方法
4 回答
如何添加跟随游戏的敌人精灵
10 回答
如何添加路径以便python可以找到程序?
2 回答
如何添加身份验证/安全性以使用happybase访问HBase?
4 回答