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
要注意的是,这种写法会造成代码结构的不清晰。