1try: 2 try: 3 from ucollections import namedtuple 4 except ImportError: 5 from collections import namedtuple 6except ImportError: 7 print("SKIP") 8 raise SystemExit 9 10T = namedtuple("Tup", ["foo", "bar"]) 11# CPython prints fully qualified name, what we don't bother to do so far 12#print(T) 13for t in T(1, 2), T(bar=1, foo=2): 14 print(t) 15 print(t[0], t[1]) 16 print(t.foo, t.bar) 17 18 print(len(t)) 19 print(bool(t)) 20 print(t + t) 21 print(t * 3) 22 23 print([f for f in t]) 24 25 print(isinstance(t, tuple)) 26 27 # Check tuple can compare equal to namedtuple with same elements 28 print(t == (t[0], t[1]), (t[0], t[1]) == t) 29 30# Create using positional and keyword args 31print(T(3, bar=4)) 32 33try: 34 t[0] = 200 35except TypeError: 36 print("TypeError") 37try: 38 t.bar = 200 39except AttributeError: 40 print("AttributeError") 41 42try: 43 t = T(1) 44except TypeError: 45 print("TypeError") 46 47try: 48 t = T(1, 2, 3) 49except TypeError: 50 print("TypeError") 51 52try: 53 t = T(foo=1) 54except TypeError: 55 print("TypeError") 56 57try: 58 t = T(1, foo=1) 59except TypeError: 60 print("TypeError") 61 62# enough args, but kw is wrong 63try: 64 t = T(1, baz=3) 65except TypeError: 66 print("TypeError") 67 68# bad argument for member spec 69try: 70 namedtuple('T', 1) 71except TypeError: 72 print("TypeError") 73 74# Try single string 75T3 = namedtuple("TupComma", "foo bar") 76t = T3(1, 2) 77print(t.foo, t.bar) 78 79# Try tuple 80T4 = namedtuple("TupTuple", ("foo", "bar")) 81t = T4(1, 2) 82print(t.foo, t.bar) 83 84# Try single string with comma field separator 85# Not implemented so far 86#T2 = namedtuple("TupComma", "foo,bar") 87#t = T2(1, 2) 88