ruby中有乙個很方便的struct類,用來實現結構體。這樣就不用費力的去定義乙個完整的類來僅僅用作訪問屬性。
複製** **如下:
class dog < struct.new(:name, :agwww.cppcns.come)
endfred = dog.new("fred", 5)
printf "name:%s age:%d", fred.name, fred.age
##name:fred age:5
pyth中也可以這麼幹,但寫法很累贅。其中包含self.name = name 這種很煩人的寫法。
複製** **如下:
class dog(object):
def __init__(self, name, age):
self.name = name
self.age = age
fred = dog("fred", 5)
print('name: age:'.format(name=fred.name, age=fred.age))
##name:fred age:5
程式設計客棧想到我大python是無所不能的,有沒有一種簡化結構體類屬性定義的方法呢?答案肯定是有的。在補習了一些python黑魔法技術後,我想到利用裝飾器函式和元程式設計技術www.cppcns.com來實現。
複製** **如下:
def struct(*name):
""" 裝飾器函式
&nwww.cppcns.combsp; 用途:用於在類定義中,自動設定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: age:'.format(name=fred.name, age=fred.age))
##name:fred age:5
要注意的是,這種寫法會造成**結構的不清晰。
本文標題: python中使用裝飾器和元程式設計實現結構體類例項
本文位址:
rn中使用裝飾器
裝飾器函式 裝飾器中執行的順序為從內到外,先執行檢視元件的建構函式 在從內到外執行裝飾器中的建構函式。如果 asd 是乙個方法,那麼需要閉包多巢狀一層函式 function asd params add function ccc wrap delete export 建立檢視 import reac...
在vue中使用裝飾器
在使用js寫vue專案時,我們也可以使用裝飾器來實現aop,如刪除確認,可以把它提取出來。import from element ui import vue from vue function confirmation target,name,descriptor return descriptor...
在 vue 中使用裝飾器
在 vue 中使用 ts 時,有一句常見的 import from vue property decorator vue property decorator 是 vue 中封裝裝飾器的外掛程式,其中有哪些裝飾器呢?裝飾器首字母大寫 component watch prop model emit 一...