Python中文
首页
教程
问答
标签
搜索
登录
注册
Python中的多态性与数据库加载
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我在以多态方式将记录加载到数据库时遇到问题。在</p> <p>我有:</p> <ul> <li>由不同类型的记录(<code>RecordA</code>,<code>RecordB</code>)扩展的<code>Record</code>对象</li> <li>一种方法<code>load_record()</code>,它不知道它正在加载什么类型的记录</li> <li>一个数据库接口,它需要包含关于数据库的所有信息</li> </ul> <p>据我所知,在多态性方面我可以做到:</p> <pre><code>class RecordA(Record): def load_into_db(self, db_impl): db_impl.load_record_a(self) class DbImpl(DbInt): def load_record_a(self, record): ... def load_record_b(self, record): ... def load_record(record): record.load_into_db(db_impl) </code></pre> <p>或者</p> ^{pr2}$ <p>这两个看起来都有点笨重。或者,我们可以有效地使用switch语句:</p> <pre><code>class DbImpl(DbInt): procs = { RecordA: ..., RecordB: ...} ... def load_record(record): data = record.get_data() db_proc = procs[type(record)] db_impl.load_record(record_data, db_proc) </code></pre> <p>现在可能已经很明显了,问题是数据库需要使用特定的存储过程(它在自己的代码中有),但是如果不询问记录本身,它就不知道该使用哪个存储过程。在</p> <p>例1在我看来是最具多态性的,但它仍然需要在每次添加新记录类型时编辑<code>DbImpl</code>代码,所以它比示例3更好吗?如果是,为什么?在</p> <p>干杯, 威尔</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>对我来说最有意义的是拥有一个基类,它包含基本的数据库功能,例如将一些东西放入数据库和连接信息中。然后,从这个基类中,您将对RecordA、RecordB、RecordC、。。。它将保存信息/功能,例如存储过程信息。拥有一个基类,包含大量方法,这感觉很笨拙,在我看来不适合OOP范式。</p> <p>因此,具有基本数据库功能的基类,那么每个记录子类都将包含该特定记录类型所需的信息。</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
文本导入时标题行中的特殊字符
5 回答
文本小部件:在没有输入时更新并在循环后保持空闲
10 回答
文本小部件tkin
10 回答
文本小部件tkinter中的标签更改或文本外观更改是否有撤消功能?
1 回答
文本小部件tkinter复制图像选项
4 回答
文本小部件上的Python Tkinter ttk滚动条未缩放
4 回答
文本小部件上的滚动条可能需要根据制表符ord显示前进行滚动
9 回答
文本小部件不显示lis中的内容
4 回答
文本小部件不显示Unicode字符
7 回答
文本小部件中写入的行间距
2 回答
文本小部件中的文本作为变量
6 回答
文本小部件中的滚动条仅显示在底部
10 回答
文本小部件中的选项卡键空间计数
3 回答
文本小部件作为Lis
3 回答
文本小部件在主框架中扩展列宽
2 回答
文本小部件未使用删除功能清除
5 回答
文本小部件滚动动画(Tkinter、Python)
1 回答
文本居中。格式正确吗?
8 回答
文本差分算法
8 回答
文本已知时音频文件中的单词索引
3 回答