mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	make __doc__ mutable on heaptypes (closes #12773)
This commit is contained in:
		
							parent
							
								
									d9f23d2004
								
							
						
					
					
						commit
						01fc6cd056
					
				
					 3 changed files with 25 additions and 1 deletions
				
			
		|  | @ -4261,6 +4261,19 @@ class X: | ||||||
|         m = str(cm.exception) |         m = str(cm.exception) | ||||||
|         self.assertEqual("'foo' in __slots__ conflicts with class variable", m) |         self.assertEqual("'foo' in __slots__ conflicts with class variable", m) | ||||||
| 
 | 
 | ||||||
|  |     def test_set_doc(self): | ||||||
|  |         class X: | ||||||
|  |             "elephant" | ||||||
|  |         X.__doc__ = "banana" | ||||||
|  |         self.assertEqual(X.__doc__, "banana") | ||||||
|  |         with self.assertRaises(TypeError) as cm: | ||||||
|  |             type(list).__dict__["__doc__"].__set__(list, "blah") | ||||||
|  |         self.assertIn("can't set list.__doc__", str(cm.exception)) | ||||||
|  |         with self.assertRaises(TypeError) as cm: | ||||||
|  |             type(X).__dict__["__doc__"].__delete__(X) | ||||||
|  |         self.assertIn("can't delete X.__doc__", str(cm.exception)) | ||||||
|  |         self.assertEqual(X.__doc__, "banana") | ||||||
|  | 
 | ||||||
| class DictProxyTests(unittest.TestCase): | class DictProxyTests(unittest.TestCase): | ||||||
|     def setUp(self): |     def setUp(self): | ||||||
|         class C(object): |         class C(object): | ||||||
|  |  | ||||||
|  | @ -10,6 +10,8 @@ What's New in Python 3.3 Alpha 1? | ||||||
| Core and Builtins | Core and Builtins | ||||||
| ----------------- | ----------------- | ||||||
| 
 | 
 | ||||||
|  | - Issue #12773: Make __doc__ mutable on user-defined classes. | ||||||
|  | 
 | ||||||
| - Issue #12766: Raise an ValueError when creating a class with a class variable | - Issue #12766: Raise an ValueError when creating a class with a class variable | ||||||
|   that conflicts with a name in __slots__. |   that conflicts with a name in __slots__. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -588,6 +588,15 @@ type_get_doc(PyTypeObject *type, void *context) | ||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | static int | ||||||
|  | type_set_doc(PyTypeObject *type, PyObject *value, void *context) | ||||||
|  | { | ||||||
|  |     if (!check_set_special_type_attr(type, value, "__doc__")) | ||||||
|  |         return -1; | ||||||
|  |     PyType_Modified(type); | ||||||
|  |     return PyDict_SetItemString(type->tp_dict, "__doc__", value); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| static PyObject * | static PyObject * | ||||||
| type___instancecheck__(PyObject *type, PyObject *inst) | type___instancecheck__(PyObject *type, PyObject *inst) | ||||||
| { | { | ||||||
|  | @ -623,7 +632,7 @@ static PyGetSetDef type_getsets[] = { | ||||||
|     {"__abstractmethods__", (getter)type_abstractmethods, |     {"__abstractmethods__", (getter)type_abstractmethods, | ||||||
|      (setter)type_set_abstractmethods, NULL}, |      (setter)type_set_abstractmethods, NULL}, | ||||||
|     {"__dict__",  (getter)type_dict,  NULL, NULL}, |     {"__dict__",  (getter)type_dict,  NULL, NULL}, | ||||||
|     {"__doc__", (getter)type_get_doc, NULL, NULL}, |     {"__doc__", (getter)type_get_doc, (setter)type_set_doc, NULL}, | ||||||
|     {0} |     {0} | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Benjamin Peterson
						Benjamin Peterson