mirror of https://github.com/python/cpython
make __doc__ mutable on heaptypes (closes #12773)
This commit is contained in:
parent
d9f23d2004
commit
01fc6cd056
|
@ -4261,6 +4261,19 @@ order (MRO) for bases """
|
||||||
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…
Reference in New Issue