最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python中使用裝飾器和元編程實(shí)現(xiàn)結(jié)構(gòu)體類實(shí)例

 更新時(shí)間:2015年01月28日 16:12:03   投稿:junjie  
Python中使用裝飾器和元編程實(shí)現(xiàn)結(jié)構(gòu)體類實(shí)例,本文的方法算是一種Python的黑魔法技術(shù),并非Python的常規(guī)寫法,需要的朋友可以參考下

Ruby中有一個(gè)很方便的Struct類,用來實(shí)現(xiàn)結(jié)構(gòu)體。這樣就不用費(fèi)力的去定義一個(gè)完整的類來僅僅用作訪問屬性。

復(fù)制代碼 代碼如下:

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 這種很煩人的寫法。
復(fù)制代碼 代碼如下:

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是無所不能的,有沒有一種簡(jiǎn)化結(jié)構(gòu)體類屬性定義的方法呢?答案肯定是有的。在補(bǔ)習(xí)了一些Python黑魔法技術(shù)后,我想到利用裝飾器函數(shù)和元編程技術(shù)來實(shí)現(xiàn)。
復(fù)制代碼 代碼如下:

def struct(*name):
    """ 裝飾器函數(shù)
        用途:用于在類定義中,自動(dòng)設(shè)置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


要注意的是,這種寫法會(huì)造成代碼結(jié)構(gòu)的不清晰。

相關(guān)文章

最新評(píng)論

阿巴嘎旗| 鲁甸县| 江达县| 通山县| 广饶县| 南城县| 东港市| 板桥市| 靖边县| 田林县| 抚远县| 日喀则市| 襄城县| 上杭县| 乌拉特前旗| 田林县| 剑川县| 库车县| 平舆县| 阿克苏市| 宣化县| 咸丰县| 德钦县| 纳雍县| 湘潭市| 错那县| 郎溪县| 昌图县| 和政县| 宁南县| 海安县| 玉树县| 石景山区| 万荣县| 彰化县| 梁河县| 开原市| 墨脱县| 海门市| 邵阳县| 洛浦县|