Python中使用裝飾器和元編程實(shí)現(xiàn)結(jié)構(gòu)體類實(shí)例
Ruby中有一個(gè)很方便的Struct類,用來實(shí)現(xiàn)結(jié)構(gòu)體。這樣就不用費(fèi)力的去定義一個(gè)完整的類來僅僅用作訪問屬性。
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是無所不能的,有沒有一種簡化結(jié)構(gòu)體類屬性定義的方法呢?答案肯定是有的。在補(bǔ)習(xí)了一些Python黑魔法技術(shù)后,我想到利用裝飾器函數(shù)和元編程技術(shù)來實(shí)現(xiàn)。
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)文章
Scrapy框架基本命令與settings.py設(shè)置
這篇文章主要介紹了Scrapy框架基本命令與settings.py設(shè)置,結(jié)合實(shí)例形式分析了創(chuàng)建爬蟲項(xiàng)目、創(chuàng)建爬蟲文件、存儲(chǔ)、打開網(wǎng)頁及settings.py設(shè)置等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事項(xiàng)
這篇文章主要介紹了Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事項(xiàng),非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-11-11Python實(shí)現(xiàn)新型冠狀病毒傳播模型及預(yù)測代碼實(shí)例
在本篇文章里小編給大家整理的是關(guān)于Python實(shí)現(xiàn)新型冠狀病毒傳播模型及預(yù)測代碼內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2020-02-02Python Queue模塊詳細(xì)介紹及實(shí)例
這篇文章主要介紹了Python Queue模塊詳細(xì)介紹及實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-12-12python 爬蟲一鍵爬取 淘寶天貓寶貝頁面主圖顏色圖和詳情圖的教程
今天小編就為大家分享一篇python 爬蟲一鍵爬取 淘寶天貓寶貝頁面主圖顏色圖和詳情圖的教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05