When __slots__ are set to a unicode string, make it work the same as

setting a plain string, ie don't expand to single letter identifiers.
This commit is contained in:
Neal Norwitz 2007-04-14 05:25:50 +00:00
parent e6bdb9be0e
commit cbd9ee69ee
3 changed files with 21 additions and 2 deletions

View File

@ -1225,13 +1225,29 @@ def slots():
raise TestFailed, "[''] slots not caught" raise TestFailed, "[''] slots not caught"
class C(object): class C(object):
__slots__ = ["a", "a_b", "_a", "A0123456789Z"] __slots__ = ["a", "a_b", "_a", "A0123456789Z"]
# XXX(nnorwitz): was there supposed to be something tested
# from the class above?
# Test a single string is not expanded as a sequence.
class C(object):
__slots__ = "abc"
c = C()
c.abc = 5
vereq(c.abc, 5)
# Test unicode slot names # Test unicode slot names
try: try:
unichr unicode
except NameError: except NameError:
pass pass
else: else:
# Test a single unicode string is not expanded as a sequence.
class C(object):
__slots__ = unicode("abc")
c = C()
c.abc = 5
vereq(c.abc, 5)
# _unicode_to_string used to modify slots in certain circumstances # _unicode_to_string used to modify slots in certain circumstances
slots = (unicode("foo"), unicode("bar")) slots = (unicode("foo"), unicode("bar"))
class C(object): class C(object):

View File

@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 1?
Core and builtins Core and builtins
----------------- -----------------
- When __slots__ are set to a unicode string, make it work the same as
setting a plain string, ie don't expand to single letter identifiers.
- Request #1191699: Slices can now be pickled. - Request #1191699: Slices can now be pickled.
- Request #1193128: str.translate() now allows a None argument for - Request #1193128: str.translate() now allows a None argument for

View File

@ -1816,7 +1816,7 @@ type_new(PyTypeObject *metatype, PyObject *args, PyObject *kwds)
/* Have slots */ /* Have slots */
/* Make it into a tuple */ /* Make it into a tuple */
if (PyString_Check(slots)) if (PyString_Check(slots) || PyUnicode_Check(slots))
slots = PyTuple_Pack(1, slots); slots = PyTuple_Pack(1, slots);
else else
slots = PySequence_Tuple(slots); slots = PySequence_Tuple(slots);