麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > Python > 正文

Python中使用裝飾器和元編程實現結構體類實例

2020-02-23 06:21:22
字體:
來源:轉載
供稿:網友

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

要注意的是,這種寫法會造成代碼結構的不清晰。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久章草影院 | 欧美成人午夜影院 | 日韩视频一区二区在线观看 | 黄色特级视频 | 黄色片网站在线免费观看 | 香蕉视频h| 国产精品亚洲综合 | 国产二区三区视频 | 羞羞电影在线观看 | 久久久www视频 | 国产 一区 精品 | 亚洲骚图 | 欧美黄一区| 91精品视频免费 | 欧美日韩国产综合网 | 欧美一区二区三区不卡免费观看 | 亚洲 91| 最新中文字幕在线视频 | 成人爱爱电影 | 精品中文字幕在线观看 | 欧美h版在线观看 | 久久久久国产精品久久久久 | 久久91亚洲人成电影网站 | 一本到免费视频 | chengrenyingshi | 久久久久久三区 | 亚洲精品一区中文字幕 | 外国一级黄色片 | 国产成人精品午夜 | 欧美人的天堂一区二区三区 | 操操插插 | 美女网站黄在线观看 | 国产精品一区二区x88av | 国产精品久久久久久久久久东京 | 九九黄色 | 国产精品麻豆91 | 中文字幕涩涩久久乱小说 | 亚洲精品一区二区三区在线看 | 久色成人| 欧美在线中文字幕 | 亚洲一区久久 |