最近在看《Python算法教程》,今天看到了一個新的模式,記錄下來。
引用:
當樹這樣的數據結構被原型化(或者乃至於被定型)時,它往往會時一個非常有用而靈活的類型,允許我們在其構造器中設置任何屬性。在這些情況下,我們會需要用到一種叫做“Bunch”的設計模式。
class Bunch(dict):
def __init__(self, *args, **kwargs):
super(Bunch, self).__init__(*args, **kwargs)
self.__dict__ = self
先舉個例子簡單的使用下這個Bunch類
>>> x = Bunch(a="1", b="2", c="3")
>>> print (x.a)
'1'
>>> print (x.b)
'2'
>>> print (x.c)
'3'
由於這個類直接繼承dict類,所以我們可以自然而然地獲得dict類地大量功能,比如對鍵/值的遍歷,或者簡單查詢一個屬性是否存在。
T = Bunch
t = T(left=T(left="1",right="2"),right=T(left="3",right="4"))
>>> t.left
{'left': '1', 'right': '2'}
>>> t.left.right
'2'
>>> t['left']['right']
'2'
>>> 'left' in t.right
True
>>> '3' in t.right
False 這樣就構建好了樹型結構,因為Bunch模式非常靈活,其屬性可以動態設置,所以可以用該模型實現很多類型。
