V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
sbmzhcn
V2EX  ›  Python

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

  •  
  •   sbmzhcn · 2014-11-19 09:14:51 +08:00 · 4180 次点击
    这是一个创建于 3668 天前的主题,其中的信息可能已经有所发展或是发生改变。
    初学python,对类了解不是很多,现在有一个需求,想请教如何操作:

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

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

    如果有知道的,万分感谢!
    6 条回复    2014-11-22 01:25:50 +08:00
    superbear
        1
    superbear  
       2014-11-19 09:38:04 +08:00   ❤️ 1
    可以这样动态导入一个类
    把import语句构造成python代码的字符串,再传给exec语句执行:
    >>> modname='string'
    >>> exec "import "+modname
    ryd994
        3
    ryd994  
       2014-11-21 00:29:25 +08:00
    这种情况应该优先写个markdown之类的模板,然后再写一个解析器。
    真是被OO惯坏了。
    要把可变的做成数据,不可变的提炼出来做成逻辑。
    至于exec……是可行解,是不是办法的办法,如果检查没做好容易出漏洞
    sbmzhcn
        4
    sbmzhcn  
    OP
       2014-11-21 16:31:53 +08:00
    @ryd994 能详细说说吗,我就是想把可变的做成数据,不可变的提出来。如果有什么示例就好了,我可以研究下。
    crossmaya
        5
    crossmaya  
       2014-11-21 23:27:00 +08:00
    @sbmzhcn 参考学习__import__函数还有imp模块。
    ryd994
        6
    ryd994  
       2014-11-22 01:25:50 +08:00 via Android
    @sbmzhcn 比如说,假如发布文章分两步,登录和填写表单。
    首先写一个父类,提供两个方法接口
    然后每个域名一个子类实现
    主程序就接受父类作为参数,然后依次调用方法。
    根据域名,传不同的子类作为参数,一堆if或者case就好
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4189 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 10:16 · PVG 18:16 · LAX 02:16 · JFK 05:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.