一、如何实现系统的灵活扩展
在实际的应用中,经常要考虑系统的扩展性。当一个系统定型并被打包发布后(甚至被转成了exe文件包后),想要在不破坏整体性的同时,又能方便的扩展(或调整)系统的功能,就像插件、补丁这些功能。
1. 使用类别名+外部文件来扩展内部类
原理:在代码编写过程中,注意使用类别名。即在类的定义完成后,给类赋一个标准别名,然后在类的实现时使用这个标准别名来操作。在扩展时,执行一个外部文件,这个文件中对原类做了扩展,并将标准别名赋给这个扩展类,就可以实现功能扩展了。
举个例子:
代码一:test.py
----------------------------------------------------------
import os
class OldClass:
def __init__(self):
print 'OldClass: init'
def Test(self, info):
print 'OldClass: ' + info
def __del__(self):
print 'OldClass: del'
# 定义了类OldClass,赋了别名TestClass
TestClass = OldClass
if os.path.exists('plugin.py'):
execfile('plugin.py')
if __name__ == '__main__':
T = TestClass()
T.Test('info')
T = None
print '-END-'
---------------------------------------------------------
代码二:plugin.py
---------------------------------------------------------
class NewClass(OldClass):
def Test(self, info):
print 'NewClass: ' + info
# 定义了OldClass的子类NewClass,赋了别名TestClass
TestClass = NewClass
---------------------------------------------------------
运行:在没有plugin.py时,执行了OldClass的Test方法,而在添加了plugin.py后,执行了NewClass的Test方法,这样我们只要修改外部文件plugin.py,就能达到不修改原始文件时扩展功能的目的。
在实际的应用中,经常要考虑系统的扩展性。当一个系统定型并被打包发布后(甚至被转成了exe文件包后),想要在不破坏整体性的同时,又能方便的扩展(或调整)系统的功能,就像插件、补丁这些功能。
1. 使用类别名+外部文件来扩展内部类
原理:在代码编写过程中,注意使用类别名。即在类的定义完成后,给类赋一个标准别名,然后在类的实现时使用这个标准别名来操作。在扩展时,执行一个外部文件,这个文件中对原类做了扩展,并将标准别名赋给这个扩展类,就可以实现功能扩展了。
举个例子:
代码一:test.py
----------------------------------------------------------
import os
class OldClass:
def __init__(self):
print 'OldClass: init'
def Test(self, info):
print 'OldClass: ' + info
def __del__(self):
print 'OldClass: del'
# 定义了类OldClass,赋了别名TestClass
TestClass = OldClass
if os.path.exists('plugin.py'):
execfile('plugin.py')
if __name__ == '__main__':
T = TestClass()
T.Test('info')
T = None
print '-END-'
---------------------------------------------------------
代码二:plugin.py
---------------------------------------------------------
class NewClass(OldClass):
def Test(self, info):
print 'NewClass: ' + info
# 定义了OldClass的子类NewClass,赋了别名TestClass
TestClass = NewClass
---------------------------------------------------------
运行:在没有plugin.py时,执行了OldClass的Test方法,而在添加了plugin.py后,执行了NewClass的Test方法,这样我们只要修改外部文件plugin.py,就能达到不修改原始文件时扩展功能的目的。