Python中的动态类


有这样一个需求,我有SegmentReaderPostagReaderConllReader这三个Reader,他们都继承于一个Reader类。在程序运行中,由用户通过segmentpostagconll决定读入哪一种数据,所以XReader的实例化也由用户决定。当然,我们可以写一连串的if判断,但是这往往不够美观。这里有一个python动态创建类的问题。

Python中有个一函数globals()返回当前全局的符号表,如果已经import了这三个类,他们就会出现在全局的符号表中。

from corpusproc.io import SegmentReader, PostagReader, ConllReader

def createObject(className, * args):
cls = globals()[className] if isinstance(cls, type) and isinstance(args[0], file):
return cls(args[0])
else:
raise Exception("No such class")

测试一下

format = "segment"
reader = createObject(format[0].upper() + format[1:]) format = "unknown"
reader = createObject(format[0].upper() + format[1:])
# Raise Exception "No such class"

最新文章

  1. linux cat 命令详解
  2. Oracle 10g -- 修改DB的编码
  3. CSS的sprite和单位
  4. ASP.NET MVC 快速开发框架之 SqlSugar+SyntacticSugar+JQWidgetsSugar+jqwidgets
  5. [__NSCFString absoluteURL]错误的解决方案
  6. poj 3216 Repairing Company(最短路Floyd + 最小路径覆盖 + 构图)
  7. python eval函数
  8. Wordpress更换主题之后出错
  9. BAPI_GOODSMVT_CREATE 移动类型311 CODE = '04' 代码
  10. eclipse JVM 性能调优
  11. xamarin.forms之使用CarouselView插件模仿网易新闻导航
  12. vue项目做seo优化(prerender-spa-plugin vue-meta-info)
  13. [离散时间信号处理学习笔记] 8. z逆变换
  14. MySql数据库学习笔记(2)
  15. laravel 不理解的call方法
  16. 洛谷.3805.[模板]manacher算法
  17. InstallShield 创建 visual studio 工程的时候 指向 任意 visual studio 版本 方法 (修改 计算机 默认 visual studio shell 版本)
  18. centos 重启日志服务
  19. MQ介绍 & 实例
  20. TZOJ 5280 搜索引擎(模拟字符串)

热门文章

  1. 【leetcode】958. Check Completeness of a Binary Tree
  2. leetcode-160周赛-5241-铺瓷砖
  3. 【转】SpringMVC整合websocket实现消息推送及触发
  4. 用php 生成 excel 表格
  5. LOJ6485 LJJ 学二项式定理 解题报告
  6. 【LeetCode 2】两数相加
  7. AcWing 199. 余数之和 (除法分块)打卡
  8. NX二次开发-Block UI C++界面Toggle(开关)控件的获取(持续补充)
  9. atlcomcli.h(1756): error C2338: CVarTypeInfo< char > cannot be compiled with /J or _CHAR_UNSIGNED fl
  10. Guava EventBus集成spring