[theWord] 一种英文字典的基类设计
theWord --- 一种英文字典的基类设计
使用场景
想写一个应用,来记录自己背单词时候,对每个单词的记忆状况之类的东西。至于为什么做这个,试过了一些背单词软件,并不觉得好用,自己做一个吧。
那么在对英文单词的中文释义获取方面,手动输入太累了,就是懒。。。解决方案就是打算使用网络词典(有道、百度什么的)获取英文单词的中文释义,这个就是最初设计时候的应用场景。
该类的代码-->> basicDict.py,还依赖一个读配置文件的类-->>configFile.py。
基类
打算不止使用一种词典,一个是参考多个词典对学习来说有帮助,二是万一一个词典炸了,就不好了。所以设计了这么一个基类,给具体的各个词典的类继承。
粗略看了一下,因为各个词典网络都会要求使用者提供一个API_KEY,主要是为了限制并发访问次数和总访问次数之类的,毕竟是免费的;所以这个基类做的事情就是获取API_KEY。
但是API_KEY的申请,请使用者自己完成,反正也不困难。
几种方式
这里设计了3中方式获取开发者已经申请好了的KEY:
在程序初始化时:
- 直接提供给程序。
- 提供配置文件路径,从中获取。
- 提供URL,获取URL内容,获取KEY。
根据以上情况,本类应该具有一下几个变量:
- API_KEY:用来存储KEY的字符串形式。
- API_URL:获取KEY的URL
- has_API:一个状态变量,用来存储是否已经有了KEY。
那么代码如下:
class basicDict(object):
'''
An API_KEY is required.
'''
name ='DEFAULT_DICTIONARY_NAME'
API_KEY = ''
has_API = False
default_api_url = "http://127.0.0.1/api-key/youdao.html"
API_url = ''
上面还加了一个默认的URL,这个是在自己的电脑上,为了使用方便添加的;下面就具体的看3种方式的具体实现。
那么在初始化的时候,应该在init函数中定义函数的默认参数:
def __init__(self,API_KEY = 'DEFAULT',API_URL= 'DEFAULT',API_PATH = "DEFAULT"):
1. 直接提供给程序
最简单粗暴的在初始化的时候赋值就可以了:
if not API_KEY == 'DEFAULT':
self.API_KEY = API_KEY
self.has_API = True
return
2. 使用URL获取
对于这种情况,单独写了一个方法:
def get_api_key_from_url(self , url = 'DEFAULT'):
if url == 'DEFAULT':
url = self.API_URL
pass
try:
q = requests.get(url)
html_string = q.text
code = q.status_code
if code != 200:
raise RuntimeError('Request Failed!')
pass
self.API_KEY = html_string.replace('\n','')
self.has_API = True
return True
except:
return False
pass
然后在初始化的过程中进行调用:
# use URL
if not API_URL == 'DEFAULT':
self.API_URL = API_URL
self.get_api_key_from_url()
return
3. 使用配置文件
最后是使用配置文件进行获取:
# use conf file
if not API_PATH == 'DEFAULT':
config_file = configFile(API_PATH)
key = config_file.get(self.name ,'api_key')
if not key == False:
self.API_KEY = key
self.has_API = True
else:
pass
return
这里面使用了一个类:configFile,关于这个类的说明,随笔还没有写完,等写完了在这里放链接。
4. 若还没有API_KEK
由于API_KEY是必须的,所以如果没有的话,无法进行下面的操作,在这里使用raise抛出异常。
# no key
error_message = 'Need ' +self.name + ' API_KEY!'
raise RuntimeError(error_message)
测试
最后可以测试一下:
def main():
e = basicDict(API_PATH='conf.ini',name='youdao')
print(e.API_KEY)
if __name__ == "__main__":
main()

后续
可以使用该类作为基类,完成-->> 使用有道API 的设计。
[theWord] 一种英文字典的基类设计的更多相关文章
- iOS控制器之基类设计
题记 在进入新公司后.经过这一个月的重构项目,终于把项目做到了个人相对满意的程度(还有一种不满意的叫老板的需求,提过多次意见也没用= =!).在这次重构中按照以前的思路设计出了个人觉得比较适用的一个基 ...
- iOS 基于MVC设计模式的基类设计
iOS 基于MVC设计模式的基类设计 https://www.jianshu.com/p/3b580ffdae00
- 以人类 Person 为基类设计学生类 Student 和教师类 Teacher
学习内容:实验二以人类 Person 为基类设计学生类 Student 和教师类 Teacher 示例代码: package 实验二; import java.util.Scanner; class ...
- 实验二——以点类 Point 为基类设计圆类 Circle
学习内容:以点类 Point 为基类设计圆类 Circle 示例代码: package 实验二; import java.util.Scanner; class Point{//父类Point pri ...
- C++:基类和派生类
4.1 派生类的声明 继承实例如下: class Person{ //声明基类Person public: void print() { cout<<"name:"&l ...
- C++学习之路—继承与派生(一):基本概念与基类成员的访问属性
(本文根据<c++程序设计>(谭浩强)总结而成,整理者:华科小涛@http://www.cnblogs.com/hust-ghtao,转载请注明) 1 基本思想与概念 在传统的程序设计 ...
- C++派生类与基类的关系
派生类与基类有这些关系: 1.公有派生类从基类继承所有成员和成员函数 2.公有派生类无法直接访问从基类继承的私有成员,但可以通过继承的公共接口访问. 3.公有派生类无法继承基类的友元函数. 4.基类先 ...
- 读书笔记 effective c++ Item 7 在多态基类中将析构函数声明为虚析构函数
1. 继承体系中关于对象释放遇到的问题描述 1.1 手动释放 关于时间记录有很多种方法,因此为不同的计时方法创建一个TimeKeeper基类和一些派生类就再合理不过了: class TimeKeepe ...
- c++中派生类对基类成员的三种访问规则(转)
C++中派生类对基类成员的访问形式主要有以下两种:1.内部访问:由派生类中新增成员对基类继承来的成员的访问.2.对象访问:在派生类外部,通过派生类的对象对从基类继承来的成员的访问.今天给大家介绍在3中 ...
随机推荐
- JavaScript----插入视频
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- poj 1475 || zoj 249 Pushing Boxes
http://poj.org/problem?id=1475 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=249 Pushin ...
- [转]关于安装hadoop中出现的的 $HADOOP_HOME is deprecated 的解决方法
当前用户的.bash_profile在/home/用户/下,系统的.bash_profile在/etc/skel目录下; 默认可能是隐藏的:有人会问了,隐藏的我怎么打开它,一个简单的办法,直接使用vi ...
- .vimrc文件配置及航意
1. vimrc文件常见语句释义 设定 tab 的位置 :set tabstop=4 输入 tab 时自动将其转化为空格 :set expandtab ...
- windows系统调用 进程终止
#include "windows.h" #include "iostream" #include "stdio.h" using name ...
- 01---Net基础加强
声明两个变量:int n1 = 10, n2 = 20;要求将两个变量交换,最后输出n1为20,n2为10.交换两个变量,使用第三个变量! class Program { static void Ma ...
- IIS 浏览aspx页面出现 无法显示 XML 页
问题: 无法显示 XML 页. 使用 XSL 样式表无法查看 XML 输入.请更正错误然后单击 刷新按钮,或以后重试. 名称以无效字符开头.处理资源 'http://192.168.1.254:808 ...
- hadoop文件系统FileSystem详解 转自http://hi.baidu.com/270460591/item/0efacd8accb7a1d7ef083d05
Hadoop文件系统 基本的文件系统命令操作, 通过hadoop fs -help可以获取所有的命令的详细帮助文件. Java抽象类org.apache.hadoop.fs.FileSystem定义了 ...
- Servlet工作原理(转)
Servlet运行在Servlet容器中,由容器负责Servlet实例的查找及创建工作,并按照Servlet规范的规定调用Servlet的一组方法,这些方法也叫生命周期的方法.具体调用过程如下图所示: ...
- [转][Automation]- C# SendKey代码表
使用 SendKeys 将键击和组合键击发送到活动应用程序.此类无法实例化.若要发送一个键击给某个类并立即继续程序流,请使用 Send.若要等待键击启动的任何进程,请使用 SendWait. 每个键都 ...