【发布时间】:2012-07-26 17:27:07
【问题描述】:
我在以多态方式将记录加载到数据库时遇到问题。
我有:
- 由不同类型记录扩展的“
Record”对象(RecordA、RecordB) - 一个方法
load_record()不知道它正在加载什么类型的记录 - 一个数据库接口,需要包含数据库的所有信息
据我了解,多态我可以这样做:
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)
或
class RecordA(Record):
def get_record_data(self):
....
def get_db_proc(self, db_impl):
return db_impl.get_record_a_proc()
class DbImpl(DbInt):
def get_record_a_proc(self):
...
def load_record(record):
record_data = record.get_data()
db_proc = record.get_db_proc(db_impl)
db_impl.load_record(record_data, db_proc)
这两个看起来有点笨重。或者,我们可以有效地使用 switch 语句:
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)
现在可能很明显,问题是数据库需要使用特定的存储过程(在它自己的代码中),但不询问记录本身,它不知道要使用哪一个。
对我来说,示例 1 看起来最具有多态性,但是每当我们添加新类型的记录时,它仍然需要编辑 DbImpl 代码,那么它是否比示例 3 更好?如果是这样,为什么?
干杯, 会
【问题讨论】:
标签: python mysql database oop polymorphism