• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-09) 47次浏览 已收录 0个评论

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

<br />class Dog < Struct.new(:name, :age)<br />end

fred = Dog.new(“fred”, 5)
printf “name:%s age:%d”, fred.name, fred.age
##name:fred age:5

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

<br />class Dog(object):<br />    def __init__(self, name, age):<br />        self.name = name<br />        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黑魔法技术后,我想到利用装饰器函数和元编程技术来实现。

<br />def struct(*name):<br />    """ 装饰器函数<br />        用途:用于在类定义中,自动设置self.val<b style="color:transparent">来&源gao@dai!ma.com搞$代^码%网</b>ue = value<br />    """<br />    def decorator(func):<br />        def wrapper(*args, **kw):<br />            for i in range(len(name)):<br />                setattr(args[0], name[i], args[i+1])<br />            return func(*args, **kw)<br />        return wrapper<br />    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

要注意的是,这种写法会造成代码结构的不清晰。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python中使用装饰器和元编程实现结构体类实例

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址