亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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類,用來(lái)實(shí)現(xiàn)結(jié)構(gòu)體。這樣就不用費(fèi)力的去定義一個(gè)完整的類來(lái)僅僅用作訪問(wèn)屬性。

復(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)的不清晰。

相關(guān)文章

最新評(píng)論