Python中的动态类
2024-10-19 12:00:59
Python中的动态类
有这样一个需求,我有SegmentReader
、PostagReader
、ConllReader
这三个Reader
,他们都继承于一个Reader
类。在程序运行中,由用户通过segment
、postag
或conll
决定读入哪一种数据,所以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"
最新文章
- linux cat 命令详解
- Oracle 10g -- 修改DB的编码
- CSS的sprite和单位
- ASP.NET MVC 快速开发框架之 SqlSugar+SyntacticSugar+JQWidgetsSugar+jqwidgets
- [__NSCFString absoluteURL]错误的解决方案
- poj 3216 Repairing Company(最短路Floyd + 最小路径覆盖 + 构图)
- python eval函数
- Wordpress更换主题之后出错
- BAPI_GOODSMVT_CREATE 移动类型311 CODE = '04' 代码
- eclipse JVM 性能调优
- xamarin.forms之使用CarouselView插件模仿网易新闻导航
- vue项目做seo优化(prerender-spa-plugin vue-meta-info)
- [离散时间信号处理学习笔记] 8. z逆变换
- MySql数据库学习笔记(2)
- laravel 不理解的call方法
- 洛谷.3805.[模板]manacher算法
- InstallShield 创建 visual studio 工程的时候 指向 任意 visual studio 版本 方法 (修改 计算机 默认 visual studio shell 版本)
- centos 重启日志服务
- MQ介绍 &; 实例
- TZOJ 5280 搜索引擎(模拟字符串)
热门文章
- 【leetcode】958. Check Completeness of a Binary Tree
- leetcode-160周赛-5241-铺瓷砖
- 【转】SpringMVC整合websocket实现消息推送及触发
- 用php 生成 excel 表格
- LOJ6485 LJJ 学二项式定理 解题报告
- 【LeetCode 2】两数相加
- AcWing 199. 余数之和 (除法分块)打卡
- NX二次开发-Block UI C++界面Toggle(开关)控件的获取(持续补充)
- atlcomcli.h(1756): error C2338: CVarTypeInfo<; char >; cannot be compiled with /J or _CHAR_UNSIGNED fl
- Guava EventBus集成spring