`

从pyh看Python的工厂模式

阅读更多
【设想】
在做selenium前端页面测试时,想到生成html报告,需要编写个类,实现在Python内编辑html,具体思路如下:
1、编写各种tag类型,如head、title、body;
2、重载 + 运算,实现类似html + head的功能;
想到第一点,当时就觉得繁琐,要定义如此多个类(原谅我当时傻傻的),后来发现个开源项目:https://pypi.python.org/pypi/PyH/0.1
【PyH工厂模式解析】
PyH就一个源码pyh.py,很简单,以下截取部分代码分析,请尊重原作者,不要直接使用
定义一个基础类,并重载+操作符,重载<<重载符
[python] view plaincopy
class Tag(list): 
    tagname = '' 
     
    def __init__(self, *arg, **kw): 
        self.attributes = kw 
        if self.tagname :  
            name = self.tagname 
            self.isSeq = False 
        else:  
            name = 'sequence' 
            self.isSeq = True 
        self.id = kw.get('id', name) 
        #self.extend(arg) 
        for a in arg: self.addObj(a) 
 
    def __iadd__(self, obj): 
        if isinstance(obj, Tag) and obj.isSeq: 
            for o in obj: self.addObj(o) 
        else: self.addObj(obj) 
        return self 
     
    def addObj(self, obj): 
        if not isinstance(obj, Tag): obj = str(obj) 
        id=self.setID(obj) 
        setattr(self, id, obj) 
        self.append(obj) 
 
    def setID(self, obj): 
        if isinstance(obj, Tag): 
            id = obj.id 
            n = len([t for t in self if isinstance(t, Tag) and t.id.startswith(id)]) 
        else: 
            id = 'content' 
            n = len([t for t in self if not isinstance(t, Tag)]) 
        if n: id = '%s_%03i' % (id, n) 
        if isinstance(obj, Tag): obj.id = id 
        return id 
 
    def __add__(self, obj): 
        if self.tagname: return Tag(self, obj) 
        self.addObj(obj) 
        return self 
 
    def __lshift__(self, obj): 
        self += obj 
        if isinstance(obj, Tag): return obj 
 
    def render(self): 
        result = '' 
        if self.tagname: 
            result = '<%s%s%s>' % (self.tagname, self.renderAtt(), self.selfClose()*' /') 
        if not self.selfClose(): 
            for c in self: 
                if isinstance(c, Tag): 
                    result += c.render() 
                else: result += c 
            if self.tagname:  
                result += '</%s>' % self.tagname 
        result += '\n' 
        return result 
 
    def renderAtt(self): 
        result = '' 
        for n, v in self.attributes.iteritems(): 
            if n != 'txt' and n != 'open': 
                if n == 'cl': n = 'class' 
                result += ' %s="%s"' % (n, v) 
        return result 
 
    def selfClose(self): 
        return self.tagname in selfClose         

然后定义工厂类
[python] view plaincopy
def TagFactory(name): 
    class f(Tag): 
        tagname = name 
    f.__name__ = name 
    return f 

最后实现工厂模式
[python] view plaincopy
for t in tags: setattr(thisModule, t, TagFactory(t))  

【PyH生成html】
[python] view plaincopy
#生成一个page对象 
report_html = PyH(ur'乐视页面测试报告') 
'''''可以使用<<运算符往page类添加tag节点,可添加的如下
tags = ['html', 'body', 'head', 'link', 'meta', 'div', 'p', 'form', 'legend', 
        'input', 'select', 'span', 'b', 'i', 'option', 'img', 'script',
        'table', 'tr', 'td', 'th', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6',
        'fieldset', 'a', 'title', 'body', 'head', 'title', 'script', 'br', 'table',
        'ul', 'li', 'ol']
''' 
report_html << h1(u'乐视页面测试报告',cl='header1',style='color:red; text-align:center') 
#Tag对象,也可以使用<<往里面添加节点 
myul = report_html << ul(cl='ul_report') 
logintb = myul << table(cl='tb_login',border=2) 
logintb << tr(cl='tb_tr') << td(cl='tb_login_head') << p(u'登录测试用例: 1 个',style='color:blue; text-align:center') 
#最后使用printOut输出到文件或者console 
report_html.printOut('result.html')  
分享到:
评论

相关推荐

    Python3 pyh模块

    python3以上版本使用的pyh模块,用于生成html文档

    python-PyH

    这将把PyH库安装到你的Python环境的全局site-packages目录下,使得在任何Python脚本中都可以通过导入`pyh`模块来使用它。 **使用PyH生成HTML** PyH库的核心是其面向对象的设计,它将HTML元素表示为Python类。例如...

    Python-pyh2oPython绑定H2OHTTP服务器

    Python-pyh2o是Python与H2O框架交互的一个库,它允许Python程序员利用H2O的高效机器学习算法和数据分析能力。H2O是一个开源的、并行处理的预测分析平台,专为大数据和快速预测建模而设计。通过pyh2o库,我们可以直接...

    python -Pyh模块下载

    想用Python生成HTML格式,自动化测试、性能测试报告,必须神器,

    38  使用 Python为 siamese网络构建图像对 python代码,完整案例,含数据

    实现 Python 代码以生成 siamese 网络的图像对 下周,我将向您展示如何实现和训练您自己的 Siamese 网络。最终,我们将构建图像三元组的概念,以及我们如何使用三元组损失和对比损失来训练更好、更准确的孪生网络。 ...

    PyH-0.1.1.tar.gz python生成html

    Pyh 是一个强大且简约的python模块,你可以使用它在python程序中生成HTML内容。在python代码中手写HTML代码非常乏味并且使代码可读性变得非常糟糕。而且,当你尝试要去看一下HTML源码的时候,可读性同样很差。PyH为...

    pyh 模块生成html

    压缩包内的文件名称看起来是PyH库的用户手册,可能是从Google Project Hosting下载的。`UserManual - pyh - User manual for the PyH library - A powerful python module to generate HTML code from a python ...

    Python使用pyh生成HTML文档的方法示例

    Python中的`pyh`库是一个简洁的工具,用于生成HTML文档。这个库使得开发者能够方便地构建HTML结构,而无需直接编写HTML字符串。在本文中,我们将深入探讨如何使用`pyh`库来生成HTML文档,并通过实例代码来解决一些...

    python生成html+flask界面呈现

    在Python编程领域,Flask是一个轻量级的Web服务应用框架,它允许开发者用Python代码构建功能丰富的Web应用。HTML则是网页设计的基础语言,用于创建和构建网页结构。结合Python和Flask,我们可以动态生成HTML页面,...

    PyH-0.0.2.tar.gz

    Pyh 是一个强大且简约的python模块,你可以使用它在python程序中生成HTML内容。在python代码中手写HTML代码非常乏味并且使代码可读性变得非常糟糕。而且,当你尝试要去看一下HTML源码的时候,可读性同样很差。PyH为...

    Python-Pycharm实现的猴子摘桃小游戏(源代码)

    在本篇【Python-Pycharm实现的猴子摘桃小游戏(源代码)】中,我们讨论了一个使用Python编程语言和PyCharm集成开发环境(IDE)创建的趣味游戏。游戏是基于pygame库构建的,该库提供了图形用户界面和多媒体功能,非常适合...

    python-2.7.16.amd64.zip

    Python 2.7.16 是 Python 语言的一个重要版本,尤其对于那些仍然依赖于旧版Python应用的用户来说,这个版本具有极高的价值。AMD64指的是该版本是为64位架构设计的,意味着它能在支持64位操作系统的计算机上运行,...

    python 核心编程

    这是部经典在经典不过的书籍了,适合有一定 python编程经验的人使用

    PYH:csc学习过程

    在“PYH:csc学习过程”这个主题下,我们可以看到标签是“Python”,这表明我们将探讨的是关于Python编程语言的学习路径。"PYH-master"可能是项目或者教程的主目录名,暗示着这是一个有关Python的系统化学习资源。...

    Python库 | tsorb-0.0.2.tar.gz

    Python库是开发者在编程时经常会使用到的重要工具,它们提供了丰富的功能,可以帮助我们更高效地完成各种任务。本文将深入探讨“tsorb-0.0.2”这个Python库,了解其基本概念、用途和使用方法。 “tsorb-0.0.2.tar....

    pyH2oMojo:H2O MOJO包装器-允许从python进行预测,而无需网络服务器开销

    pyH2oMojo用于H2o MOJO的非官方Python包装器H2o EasyPredictModelWrapper实例周围的轻量级python包装器实例化对象将启动捆绑的Jar文件,并在localhost上建立要与之通信的端口。 字典或JSON字符串通过套接字传递给...

    非负矩阵分解matlab代码-pyh2nmf:分层rank-2非负矩阵分解的python端口

    非负矩阵划分matlab代码pyh2nmf 基于 Gillis 等人的 matlab 实现的分层 rank-2 非负矩阵分解的 python 端口。 2014年 原始matlab代码在这里: 论文:参见 N. Gillis、D. Kuang 和 H. Park,“使用 Rank-Two Non...

    UDP架构设计-以太网PYH芯片学习笔记

    6. UDP编程:涉及如何在应用程序中使用UDP套接字API(如在C或Python中),创建和发送UDP数据报,以及如何接收和处理来自网络的数据。 7. 错误检测与容错:尽管UDP不保证数据的可靠传输,但开发者仍需要考虑如何在...

    cenos7 python

    从 Python 官方网站下载 Python 3.6.1 的源码包。源码包的下载地址为: ```bash https://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz ``` #### 3. 解压源码包 使用 `xz` 和 `tar` 命令解压下载的源码包:...

Global site tag (gtag.js) - Google Analytics