標籤:
When prototyping (or even finalizing) data structures such as trees, it can be useful to have a flexible class that will allow you to specify arbitrary attributes in the constructor. In these cases, the “Bunch” pattern (named by Alex Martelli in the Python Cookbook) can come in handy. There are many ways of implementing it, but the gist of it is the following:(實現資料結構,比如說樹的時候使用,有多種實現方式,要點如下)
class Bunch(dict):
def __init__(self, *args, **kwds):
super(Bunch, self).__init__(*args, **kwds)
self.__dict__ = self
There are several useful aspects to this pattern. First, it lets you create and set arbitrary ttributes by supplying them as command-line arguments:(這個pattern很有用,第一,你可一設定任意的屬性)
>>> x = Bunch(name="Jayne Cobb", position="Public Relations")
>>> x.name
‘Jayne Cobb‘
Second, by subclassing dict, you get lots of functionality for free, such as iterating over the keys/attributes or easily checking whether an attribute is present. Here’s an example:(第二,通過子類化的dict,你可以獲得很多功能,比如迭代的key-value,或者檢查屬性值是否存在等)
>>> T = Bunch
>>> t = T(left=T(left="a", right="b"), right=T(left="c"))
>>> t.left
{‘right‘: ‘b‘, ‘left‘: ‘a‘}
>>> t.left.right
‘b‘
>>> t[‘left‘][‘right‘]
‘b‘
>>> "left" in t.right
True
>>> "right" in t.right
False
This pattern isn’t useful only when building trees, of course. You could use it for any situation where you’d want a flexible object whose attributes you could set in the constructor.(不僅僅用於建樹)
Python 之 Bunch Pattern