最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

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

来源:动视网 责编:小采 时间:2020-11-27 14:40:22
文档

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

Python中使用装饰器和元编程实现结构体类实例:Ruby中有一个很方便的Struct类,用来实现结构体。这样就不用费力的去定义一个完整的类来仅仅用作访问属性。 代码如下: class Dog end fred = Dog.new(fred, 5) printf name:%s age:%d, fred.name, fred.age ##name
推荐度:
导读Python中使用装饰器和元编程实现结构体类实例:Ruby中有一个很方便的Struct类,用来实现结构体。这样就不用费力的去定义一个完整的类来仅仅用作访问属性。 代码如下: class Dog end fred = Dog.new(fred, 5) printf name:%s age:%d, fred.name, fred.age ##name


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中使用装饰器和元编程实现结构体类实例:Ruby中有一个很方便的Struct类,用来实现结构体。这样就不用费力的去定义一个完整的类来仅仅用作访问属性。 代码如下: class Dog end fred = Dog.new(fred, 5) printf name:%s age:%d, fred.name, fred.age ##name
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top