### 一种简单容器和几个相关操作 class Box: def __init__(self, elems=None): self._elems = elems[:] if elems else [] def __len__(self): return len(self._elems) def __getitem__(self, ind): if not isinstance(ind, int): raise TypeError("Box index") if ind < 0 or ind > len(self._elems): raise IndexError("Box index") return self._elems[ind] def append(self, value): self._elems.append(value) def __setitem__(self, ind, value): if not isinstance(ind, int): raise TypeError("Box index") if ind < 0 or ind > len(self._elems): raise IndexError("Box index") self._elems[ind] = value def __contains__(self, item): return item in self._elems def __str__(self): return str(self._elems) def __iter__(self): for x in self._elems: yield x ### test code: from random import randrange def test_Box(): b1 = Box([1, 2, 3, 4]) b2 = Box() print(b1, "b1[2] is", b1[2]) b1[2] = 10 print(b1, "b1[2] is", b1[2]) for i in range(10): b2.append(randrange(20)) print(b2, "len(b2) is", len(b2)) print("Numbers in b2 which are in [1, 15):") for i in range(5, 15): if i in b2: print(i) print("Even numbers in b2:") for x in b2: if x % 2 == 0: print(x) #test_Box() class Context: def __enter__(self): print("__enter__() executed") return self def __exit__(self, type, value, trace): print("__exit__() executed") def action(self): print("action() executed") return "action ends" def test_with(): with Context() as con: print("Context:", con.action()) test_with()