from collections import namedtuple
+import pickle
import re
import sys
from unittest import TestCase, main
self.assertEqual(repr(MySimpleMapping),
__name__ + '.' + 'MySimpleMapping[~XK, ~XV]')
+ def test_dict(self):
+ T = TypeVar('T')
+ class B(Generic[T]):
+ pass
+ b = B()
+ b.foo = 42
+ self.assertEqual(b.__dict__, {'foo': 42})
+ class C(B[int]):
+ pass
+ c = C()
+ c.bar = 'abc'
+ self.assertEqual(c.__dict__, {'bar': 'abc'})
+
+ def test_pickle(self):
+ T = TypeVar('T')
+ class B(Generic[T]):
+ pass
+ global C # pickle wants to reference the class by name
+ class C(B[int]):
+ pass
+ c = C()
+ c.foo = 42
+ c.bar = 'abc'
+ z = pickle.dumps(c)
+ x = pickle.loads(z)
+ self.assertEqual(x.foo, 42)
+ self.assertEqual(x.bar, 'abc')
+ self.assertEqual(x.__dict__, {'foo': 42, 'bar': 'abc'})
+
def test_errors(self):
with self.assertRaises(TypeError):
B = SimpleMapping[XK, Any]
"Cannot substitute %s for %s in %s" %
(_type_repr(new), _type_repr(old), self))
- return self.__class__(self.__name__, self.__bases__,
+ return self.__class__(self.__name__, (self,) + self.__bases__,
dict(self.__dict__),
parameters=params,
origin=self,