Python中使用装饰器和元编程实现结构体类实例


Posted in Python onJanuary 28, 2015

Ruby中有一个很方便的Struct类,用来实现结构体。这样就不用费力的去定义一个完整的类来仅仅用作访问属性。

class Dog < Struct.new(:name, :age)

end
fred = Dog.new("fred", 5)

printf "name:%s age:%d", fred.name, fred.age

##name:fred age:5

Python3.4中也可以这么干,但写法很累赘。其中包含self.name = name 这种很烦人的写法。
class Dog(object):

    def __init__(self, name, age):

        self.name = name

        self.age = age
fred = Dog("fred", 5)

print('name:{name} age:{age}'.format(name=fred.name, age=fred.age))

##name:fred age:5

想到我大Python是无所不能的,有没有一种简化结构体类属性定义的方法呢?答案肯定是有的。在补习了一些Python黑魔法技术后,我想到利用装饰器函数和元编程技术来实现。
def struct(*name):

    """ 装饰器函数

        用途:用于在类定义中,自动设置self.value = value

    """

    def decorator(func):

        def wrapper(*args, **kw):

            for i in range(len(name)):

                setattr(args[0], name[i], args[i+1])

            return func(*args, **kw)

        return wrapper

    return decorator
class Dog(object):

    @struct('name','age')   #黑魔法所在!

    def __init__(self, *all_value):

        pass
fred = Dog("fred", 5)

print('name:{name} age:{age}'.format(name=fred.name, age=fred.age))

##name:fred age:5

要注意的是,这种写法会造成代码结构的不清晰。
Python 相关文章推荐
Python用GET方法上传文件
Mar 10 Python
python妙用之编码的转换详解
Apr 21 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
在python环境下运用kafka对数据进行实时传输的方法
Dec 27 Python
python实现两张图片拼接为一张图片并保存
Jul 16 Python
使用python实现画AR模型时序图
Nov 20 Python
Python操作redis和mongoDB的方法
Dec 19 Python
python cv2在验证码识别中应用实例解析
Dec 25 Python
python实现tail -f 功能
Jan 17 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
Sep 14 Python
Pygame Draw绘图函数的具体使用
Nov 17 Python
Python matplotlib 利用随机函数生成变化图形
Apr 26 Python
Python实现Const详解
Jan 27 #Python
python映射列表实例分析
Jan 26 #Python
Python操作MySQL简单实现方法
Jan 26 #Python
Python中的is和id用法分析
Jan 26 #Python
Python的批量远程管理和部署工具Fabric用法实例
Jan 23 #Python
推荐11个实用Python库
Jan 23 #Python
17个Python小技巧分享
Jan 23 #Python
You might like
测试您的 PHP 水平的题目
2007/05/30 PHP
smarty模板判断数组为空的方法
2015/06/10 PHP
php.ini中date.timezone设置详解
2016/11/20 PHP
用showModalDialog弹出页面后,提交表单总是弹出一个新窗口
2009/07/18 Javascript
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
JQuery入门——用one()方法绑定事件处理函数(仅触发一次)
2013/02/05 Javascript
阻止事件(取消浏览器对事件的默认行为并阻止其传播)
2013/11/03 Javascript
Jquery的Tabs内容轮换效果实现代码,几行搞定
2014/02/12 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
javascript常用方法汇总
2014/12/02 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
2015/09/16 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
JS定时器实现数值从0到10来回变化
2016/12/09 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
vuejs简单验证码功能完整示例
2019/01/08 Javascript
layui数据表格跨行自动合并的例子
2019/09/02 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
2019/12/25 jQuery
JS面向对象编程基础篇(三) 继承操作实例详解
2020/03/03 Javascript
微信小程序实现电子签名功能
2020/07/29 Javascript
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
使用apidocJs快速生成在线文档的实例讲解
2018/02/07 Python
matplotlib调整子图间距,调整整体空白的方法
2018/08/03 Python
python接口自动化(十六)--参数关联接口后传(详解)
2019/04/16 Python
python实现月食效果实例代码
2019/06/18 Python
基于keras 模型、结构、权重保存的实现
2020/01/24 Python
来自美国主售篮球鞋的零售商店:KICKSUSA
2017/11/28 全球购物
农场厂长岗位职责
2013/12/28 职场文书
情人节寄语大全
2014/04/11 职场文书
人事主管岗位职责说明书
2014/07/30 职场文书
刘胡兰观后感
2015/06/16 职场文书
导游词之安徽九华山
2019/09/18 职场文书
如何使用Python实现一个简易的ORM模型
2021/05/12 Python
Oracle11g r2 卸载干净重装的详细教程(亲测有效已重装过)
2021/06/04 Oracle