最新国产好看的视频,伊人天堂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é)構(gòu)體類屬性定義的方法呢?答案肯定是有的。在補(bǔ)習(xí)了一些Python黑魔法技術(shù)后,我想到利用裝飾器函數(shù)和元編程技術(shù)來實(shí)現(xiàn)。
復(fù)制代碼 代碼如下:

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


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

相關(guān)文章

最新評論

五莲县| 利川市| 基隆市| 嘉黎县| 措美县| 江川县| 新蔡县| 苍南县| 兰西县| 寿宁县| 龙州县| 调兵山市| 浮山县| 邛崃市| 桐城市| 麟游县| 华安县| 清新县| 德惠市| 同德县| 包头市| 成都市| 临桂县| 阜新市| 乡宁县| 留坝县| 遂溪县| 定日县| 定陶县| 太白县| 牡丹江市| 林甸县| 台江县| 方城县| 池州市| 大新县| 河源市| 奉贤区| 苍梧县| 津南区| 亳州市|