python反射、简单工厂模式
参见项目示例
github
gitee
在简单工厂模式与Qt类反射2/简单工厂模式与Qt类反射2中介绍了简单工厂模式介绍、实现、优缺点以及借助Qt反射实现简单工厂模式,实现方式相当繁琐。
对于python这种自带反射的语言,简单工厂实现起来就相当简单了。
传统简单工厂
传统方式实现简单工厂通常如下所示:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| from Welcome.Welcome import Welcome from Covid19Charts.Covid19Charts import Covid19Charts from Covid19Map.Covid19Map import Covid19Map
class TabPane(QFrame): def __init__(self, buttonNameTuple, parent=None):
def __pageFactory(self, name): if name == 'Welcome': return Welcome(self) elif name == 'Covid19Charts': return Covid19Charts(self) elif name == 'Covid19Map': return Covid19Map(self) elif name == 'Covid19GeneralView': return Covid19GeneralView(self)
|
通常的做法是import
一堆,然后根据不同的情况,new
出不同的实例。
如代码中的if…else杂谈1/代码中的if…else杂谈1中所说这种写法不符合面向对象的开闭原则
。
反射实现简单工厂
python 反射实现简单工厂相当简单:
1 2 3 4 5 6 7 8 9 10 11 12 13
| class TabPane(QFrame): def __init__(self, buttonNameTuple, parent=None):
def __pageFactory(self, name): page = __import__(name + "." + name, fromlist=[name]) pageClass = getattr(page, name) return pageClass(self)
|
来自C++
程序员的羡慕。。。