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

 更新时间:2015年01月28日 16:12:03   转载 投稿:junjie  
Python中使用装饰器和元编程实现结构体类实例,本文的方法算是一种Python的黑魔法技术,并非Python的常规写法,需要的朋友可以参考下

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打印文件的前几行或最后几行教程

    今天小编就为大家分享一篇python打印文件的前几行或最后几行教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python类中self参数用法详解

    Python类中self参数用法详解

    这篇文章主要介绍了Python类中self参数用法详解,需要的朋友可以参考下
    2020-02-02
  • Pytorch实现将模型的所有参数的梯度清0

    Pytorch实现将模型的所有参数的梯度清0

    这篇文章主要介绍了Pytorch实现将模型的所有参数的梯度清0,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • 简单的Python调度器Schedule详解

    简单的Python调度器Schedule详解

    这篇文章主要介绍了简单的Python调度器Schedule详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 基于python plotly交互式图表大全

    基于python plotly交互式图表大全

    今天小编就为大家分享一篇基于python plotly交互式图表大全,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python自动化运维之Ansible定义主机与组规则操作详解

    Python自动化运维之Ansible定义主机与组规则操作详解

    这篇文章主要介绍了Python自动化运维之Ansible定义主机与组规则操作,结合实例形式分析了自动化运维工具Ansible定义主机与组规则相关配置操作与注意事项,需要的朋友可以参考下
    2019-06-06
  • Matplotlib中%matplotlib inline如何使用

    Matplotlib中%matplotlib inline如何使用

    这篇文章主要介绍了Matplotlib中%matplotlib inline如何使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • Python matplotlib绘制饼状图功能示例

    Python matplotlib绘制饼状图功能示例

    这篇文章主要介绍了Python matplotlib绘制饼状图功能,结合实例形式分析了Python使用matplotlib模块进行数值运算与饼状图绘制相关操作技巧,需要的朋友可以参考下
    2019-09-09
  • Python列表list内建函数用法实例分析【insert、remove、index、pop等】

    Python列表list内建函数用法实例分析【insert、remove、index、p

    这篇文章主要介绍了Python列表list内建函数用法,结合具体实例形式分析了list中insert、remove、index、pop等函数的功能、使用方法与相关注意事项,需要的朋友可以参考下
    2017-07-07
  • python3.8 微信发送服务器监控报警消息代码实现

    python3.8 微信发送服务器监控报警消息代码实现

    这篇文章主要介绍了python3.8 微信发送服务器监控报警消息代码实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11

最新评论