Modify ctypes types with 'official' functions.  Backport from trunk,
snv rev 59943 and 59946.
diff --git a/Misc/NEWS b/Misc/NEWS
index a492d46..e62bb7c 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -92,6 +92,9 @@
 Library
 -------
 
+- Assigning methods to ctypes.Structure and ctypes.Union subclasses
+  after creation of the class does now work correctly.  See Issue #1700288.
+
 - Issue #3895: _lsprof could be crashed with an external timer that did not
   return a float when a Profiler object is garbage collected.
 
diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index 51a9cf8..e97f9bb 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -410,7 +410,7 @@
 StructType_setattro(PyObject *self, PyObject *key, PyObject *value)
 {
 	/* XXX Should we disallow deleting _fields_? */
-	if (-1 == PyObject_GenericSetAttr(self, key, value))
+	if (-1 == PyType_Type.tp_setattro(self, key, value))
 		return -1;
 	
 	if (value && PyString_Check(key) &&