让我们假设我有一个包含多个表的文件。我想阅读表格的内容。每个表中还有多个部分。假设我按如下方式定义了文件对象(这是我代码的一个非常粗略的布局):
from tables import TableA,TableB
class File(TableA,TableB):
def __init__(self,filename):
self.in_file_name=open(filename,'rb')
self.record_bytes=self.in_bytes=''
self.data={}
def read(self):
while 1:
self._read_records():
if unpackint(self.record_bytes)==1:
self.read_section_A1()
if unpackint(self.record_bytes)==2:
self.read_section_A2()
if unpackint(self.record_bytes)==3:
self.read_section_B1()
if unpackint(self.record_bytes)==4:
self.read_section_B2()
def _read_record(self):
self.in_bytes=self.in_file.read(4)
self.record_bytes=self.in_file.read(4)
self.in_bytes=self.in_file.read(4)
以下是TableA和TableB类的定义方式:
class TableA():
def read_section_A1(self):
self._read_record()
if unpackint(self.record_bytes)==5:
self.data['A1']='TABLEA1DATA'
def read_section_A2(self):
self._read_record()
if unpackint(self.record_bytes)==6:
self.data['A2']='TABLEA2DATA'
class TableB():
def read_section_B1(self):
self._read_record()
if unpackint(self.record_bytes)==6:
self.data['B1']='TABLEB1DATA'
def read_section_B2(self):
self._read_record()
if unpackint(self.record_bytes)==7:
self.data['B1']='TABLEB2DATA'
据我所知,上面的代码基本上扩展了File类。但我想知道这是否是一种最佳实践方法(就oop而言)。如您所见,如果我尝试调用TableA或TableB类,它们将无法工作,因为它们不是独立的。此外,继承似乎并不理想,因为通常,对象继承自更通用的类。在我的应用程序中,TableA和TableB实际上是文件的一个子集。
以下是我正在考虑的事情:
from tables import TableA,TableB
class File():
def __init__(self,filename):
self.in_file_name=open(filename,'rb')
self.record_bytes=self.in_bytes=''
self.data={}
def read(self):
while 1:
self._read_records():
if unpackint(self.record_bytes)==1:
TableA(self).read_section_A1()
if unpackint(self.record_bytes)==2:
TableA(self).read_section_A2()
if unpackint(self.record_bytes)==3:
TableB(self).read_section_B1()
if unpackint(self.record_bytes)==4:
TableB(self).read_section_B2()
def _read_record(self):
self.in_bytes=self.in_file.read(4)
self.record_bytes=self.in_file.read(4)
self.in_bytes=self.in_file.read(4)
TableA和B的定义如下:
class TableA():
def __init__(self,File):
self.File=File
def read_section_A1(self):
self.File._read_record()
if unpackint(self.File.record_bytes)==5:
self.File.data['A1']='TABLEA1DATA'
def read_section_A2(self):
self.File._read_record()
if unpackint(self.File.record_bytes)==6:
self.File.data['A2']='TABLEA2DATA'
这是首选方法吗?有没有其他方法可以改进代码?
谢谢。