Python中實現結構體類
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
要注意的是,這種寫法會造成程式碼結構的不清晰。
相關文章
- 類與結構體結構體
- C++中結構體與類的區別C++結構體
- c#中結構體和類的比較C#結構體
- Swift 類與結構體Swift結構體
- golang類和結構體Golang結構體
- Swift,結構體與類Swift結構體
- 第五章——結構體與類(實體和值)結構體
- EF:根據實體類生成表結構SQLSQL
- OC中類的結構
- Python在類中實現swith case功能Python
- Python資料結構——連結串列的實現Python資料結構
- Python資料結構——樹的實現Python資料結構
- Swift-類和結構體Swift結構體
- 資料結構-雙向連結串列(Python實現)資料結構Python
- 結構體和類中屬性定義需要static地方結構體
- python資料結構之圖的實現Python資料結構
- 實驗 結構體結構體
- python 資料結構之單連結串列的實現Python資料結構
- [資料結構]連結串列的實現在PHP中資料結構PHP
- [資料結構] 連結串列的實現在 PHP 中資料結構PHP
- Python 實現pywinauto自動化測試操作軟體(C/S結構)Python
- 資料結構-迴圈佇列(Python實現)資料結構佇列Python
- 資料結構-哈夫曼樹(python實現)資料結構Python
- 基本線性資料結構的Python實現資料結構Python
- 能否使用B/S結構實現所有C/S結構軟體的功能
- “c語言+結構體+連結串列”實現名片系統C語言結構體
- python 資料結構之雙向連結串列的實現Python資料結構
- C均值聚類 C實現 Python實現聚類Python
- java關於繼承父類,需要實現父類中的構造方法Java繼承構造方法
- 資料結構:線性表(Python實現基本操作)資料結構Python
- python 資料結構之順序列表的實現Python資料結構
- python資料結構之棧、佇列的實現Python資料結構佇列
- Python資料結構——二叉堆的實現Python資料結構
- javascript實現Map結構JavaScript
- Oracle MAA 結構實現Oracle
- 結構體中的位域結構體
- 資料結構初階--單連結串列(講解+類别範本實現)資料結構
- 譜聚類的python實現聚類Python