Issue #25472: In B[<type>], insert B in front of __bases__, to make the __dict__ descriptor work.
diff --git a/Lib/test/test_typing.py b/Lib/test/test_typing.py
index a74ec07..dc4c152 100644
--- a/Lib/test/test_typing.py
+++ b/Lib/test/test_typing.py
@@ -1,4 +1,5 @@
 from collections import namedtuple
+import pickle
 import re
 import sys
 from unittest import TestCase, main
@@ -583,6 +584,35 @@
         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]
diff --git a/Lib/typing.py b/Lib/typing.py
index d900036..49c4a06 100644
--- a/Lib/typing.py
+++ b/Lib/typing.py
@@ -981,7 +981,7 @@
                         "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,