动态调用类,需要时才加载相应的类

2014-11-19 09:14:51 +08:00
 sbmzhcn
初学python,对类了解不是很多,现在有一个需求,想请教如何操作:

现开发一个批量发布博客的工具,但博客都不是同一类型的,所以可能需要对不同的域名进行不同的设置,假设有100个域名,我为每个域名都新建一个类,那我如何操作才能在系统运行时根据域名去判断加载相应的类来使用呢?

遇到www.domain1.com 使用类 domain1
遇到www.domain2.com 使用类 domain2

如果有知道的,万分感谢!
4194 次点击
所在节点    Python
6 条回复
superbear
2014-11-19 09:38:04 +08:00
可以这样动态导入一个类
把import语句构造成python代码的字符串,再传给exec语句执行:
>>> modname='string'
>>> exec "import "+modname
gamexg
2014-11-19 09:46:33 +08:00
ryd994
2014-11-21 00:29:25 +08:00
这种情况应该优先写个markdown之类的模板,然后再写一个解析器。
真是被OO惯坏了。
要把可变的做成数据,不可变的提炼出来做成逻辑。
至于exec……是可行解,是不是办法的办法,如果检查没做好容易出漏洞
sbmzhcn
2014-11-21 16:31:53 +08:00
@ryd994 能详细说说吗,我就是想把可变的做成数据,不可变的提出来。如果有什么示例就好了,我可以研究下。
crossmaya
2014-11-21 23:27:00 +08:00
@sbmzhcn 参考学习__import__函数还有imp模块。
ryd994
2014-11-22 01:25:50 +08:00
@sbmzhcn 比如说,假如发布文章分两步,登录和填写表单。
首先写一个父类,提供两个方法接口
然后每个域名一个子类实现
主程序就接受父类作为参数,然后依次调用方法。
根据域名,传不同的子类作为参数,一堆if或者case就好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/147624

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX