我试图根据用户在创建时的请求在初始化时从不同类继承例程。我的示例是用于读取/操作/保存 g 代码文本文件的 CNCFile 类。创建时,用户输入目标机器的类型(Fanuc、Okuma、Mitsubishi 等)。由于所有这些机器都有不同的方式来处理文件中的子程序名称和子调用,因此我需要为每台机器编写单独的类/函数。
这是执行我想要的代码的示例。它只是看起来很乱。
class FanucFile(object):
def __init__(self):
print('Fanuc file type')
def subnames(self):
alist = ['0001', '0002', '0003']
return alist
def subcalls(self):
alist = ['M98 P0002', 'M98 P0003']
return alist
class OkumaFile(object):
def __init__(self):
print('Okuma file type')
def subnames(self):
alist = ['MAIN', 'SUB1', 'SUB2']
return alist
def subcalls(self):
alist = ['CALL SUB1', 'CALL SUB2']
return alist
class CNCFile(object):
def __init__(self, target_machine = 'Fanuc', file_name=None):
if target_machine == 'Fanuc':
self.file = FanucFile()
elif target_machine == 'Okuma':
self.file = OkumaFile()
if file_name <> None:
self.getfile(file_name)
self.filename = file_name
def getfile(self, name):
'''Reads file into list'''
self.filecont = ['%(Test.cnc)', \
'O0001(PART MAIN)', \
'N1', \
'G00 G17 G20 G40', \
'M98 P0002', \
'M30', \
' ', \
'O0002(SUB 2)', \
'M98 P0003', \
'M99', \
' ', \
'O0003(SUB 2)', \
'G91 G28 Z0.', \
'M99', \
'%']
def subnames(self): # wrapper around .file.subnames() - seems dumb
return self.file.subnames()
def subcalls(self): # wrapper around .file.subcalls() - seems dumb
return self.file.subcalls()
def savefile(self):
for aline in self.filecont:
print(aline)
if __name__=='__main__':
#just for testing
a = CNCFile(target_machine = 'Fanuc', file_name = 'Test.cnc')
print('File Name : ' + a.filename)
print('Subs found: ' + str(a.subnames()))
print('Sub calls : ' + str(a.subcalls()))
print('Save File :')
a.savefile()
print(' ')
我最终不得不围绕目标机器的例程编写一个包装函数,这看起来很尴尬。
稍后我还会在 CNCFile 中看到 FanucFile/OkumaFile,但我不确定这是否是我想要的。
a = CNCFile(target_machine = 'Fanuc', file_name = 'Test.cnc')
a.subnames()
a.file.subnames() # redundant
我尝试将 CNCFile 调用继承到 FanucFile 或 OkumaFile 类中,但是当 FanucFile 或 OkumaFile 类持有大量数据时,在 CNCFile 中编写保存文件例程时会变得混乱。
我应该看 super(), 元类吗?
感谢您的任何建议。