Python中使用裝飾器和元編程實現(xiàn)結(jié)構(gòu)體類實例
Ruby中有一個很方便的Struct類,用來實現(xiàn)結(jié)構(gòu)體。這樣就不用費力的去定義一個完整的類來僅僅用作訪問屬性。
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)體類屬性定義的方法呢?答案肯定是有的。在補習(xí)了一些Python黑魔法技術(shù)后,我想到利用裝飾器函數(shù)和元編程技術(shù)來實現(xiàn)。
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)文章
Python利用glob庫實現(xiàn)輕松應(yīng)對文件和目錄管理
Python提供了glob庫,它允許我們根據(jù)特定模式匹配文件和目錄,本文將詳細(xì)介紹glob庫的用法,并通過實例演示它的各種功能,需要的可以了解一下2023-07-07
Python成功解決ZeroDivisionError:?division?by?zero的方法過程
在Python編程中,ZeroDivisionError:divisionbyzero是因為嘗試除以零所導(dǎo)致的常見錯誤,這篇文章詳細(xì)介紹了錯誤的原因、解決方案,需要的朋友可以參考下2024-09-09
解決Python獲取文件提示找不到指定路徑can‘t?open?file?'area.py':
這篇文章主要給大家介紹了關(guān)于如何解決Python獲取文件提示找不到指定路徑can‘t?open?file?'area.py':[Errno?2]?No?such?file?or?directory的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
Python光學(xué)仿真從Maxwell方程組到波動方程矢量算法理解學(xué)習(xí)
這篇文章主要為大家介紹了Python光學(xué)仿真從Maxwell方程組到波動方程算法的理解學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助2021-10-10
一些Centos Python 生產(chǎn)環(huán)境的部署命令(推薦)
這篇文章主要介紹了一些Centos Python 生產(chǎn)環(huán)境的部署命令,非常不錯,具有參考借鑒價值,需要的朋友參考下吧2018-05-05
Python編程利用科赫曲線實現(xiàn)三維飄雪效果示例過程
這篇文章主要介紹了Python編程實現(xiàn)三維飄雪效果示例過程,通過本示例你可以自己做出一個浪漫的雪花飄落效果,有需要的朋友可以借鑒參考下2021-10-10

