国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Python > 正文

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

2019-11-25 18:01:17
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

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

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 仁化县| 土默特左旗| 横峰县| 合阳县| 嫩江县| 两当县| 沙河市| 江永县| 仁怀市| 溧阳市| 林周县| 海淀区| 金山区| 武平县| 将乐县| 芦溪县| 桐梓县| 仪征市| 台中县| 武乡县| 馆陶县| 凤庆县| 桐柏县| 嘉定区| 酒泉市| 济阳县| 屏山县| 富蕴县| 红桥区| 如皋市| 图们市| 梧州市| 荣昌县| 房产| 平乐县| 平远县| 景德镇市| 岗巴县| 临西县| 牡丹江市| 沙河市|