mirror of
https://github.com/python/cpython.git
synced 2025-08-02 16:13:13 +00:00
- A new type object, 'string', is added. This is a common base type
for 'str' and 'unicode', and can be used instead of types.StringTypes, e.g. to test whether something is "a string": isinstance(x, string) is True for Unicode and 8-bit strings. This is an abstract base class and cannot be instantiated directly.
This commit is contained in:
parent
9ee4b94f51
commit
cacfc07d08
6 changed files with 69 additions and 2 deletions
|
@ -39,6 +39,7 @@ typedef struct {
|
|||
char ob_sval[1];
|
||||
} PyStringObject;
|
||||
|
||||
extern DL_IMPORT(PyTypeObject) PyBaseString_Type;
|
||||
extern DL_IMPORT(PyTypeObject) PyString_Type;
|
||||
|
||||
#define PyString_Check(op) PyObject_TypeCheck(op, &PyString_Type)
|
||||
|
|
|
@ -6,6 +6,12 @@ Type/class unification and new-style classes
|
|||
|
||||
Core and builtins
|
||||
|
||||
- A new type object, 'string', is added. This is a common base type
|
||||
for 'str' and 'unicode', and can be used instead of
|
||||
types.StringTypes, e.g. to test whether something is "a string":
|
||||
isinstance(x, string) is True for Unicode and 8-bit strings. This
|
||||
is an abstract base class and cannot be instantiated directly.
|
||||
|
||||
- Deprecated features of xrange objects have been removed as
|
||||
promised. The start, stop, and step attributes and the tolist()
|
||||
method no longer exist. xrange repetition and slicing have been
|
||||
|
|
|
@ -1779,6 +1779,9 @@ _Py_ReadyTypes(void)
|
|||
if (PyType_Ready(&PyBool_Type) < 0)
|
||||
Py_FatalError("Can't initialize 'bool'");
|
||||
|
||||
if (PyType_Ready(&PyString_Type) < 0)
|
||||
Py_FatalError("Can't initialize 'str'");
|
||||
|
||||
if (PyType_Ready(&PyList_Type) < 0)
|
||||
Py_FatalError("Can't initialize 'list'");
|
||||
|
||||
|
|
|
@ -2855,6 +2855,60 @@ str_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|||
return pnew;
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
basestring_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
||||
{
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"The string type cannot be instantiated");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static char basestring_doc[] =
|
||||
"Type string cannot be instantiated; it is the base for str and unicode.";
|
||||
|
||||
PyTypeObject PyBaseString_Type = {
|
||||
PyObject_HEAD_INIT(&PyType_Type)
|
||||
0,
|
||||
"string",
|
||||
0,
|
||||
0,
|
||||
0, /* tp_dealloc */
|
||||
0, /* tp_print */
|
||||
0, /* tp_getattr */
|
||||
0, /* tp_setattr */
|
||||
0, /* tp_compare */
|
||||
0, /* tp_repr */
|
||||
0, /* tp_as_number */
|
||||
0, /* tp_as_sequence */
|
||||
0, /* tp_as_mapping */
|
||||
0, /* tp_hash */
|
||||
0, /* tp_call */
|
||||
0, /* tp_str */
|
||||
0, /* tp_getattro */
|
||||
0, /* tp_setattro */
|
||||
0, /* tp_as_buffer */
|
||||
Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE, /* tp_flags */
|
||||
basestring_doc, /* tp_doc */
|
||||
0, /* tp_traverse */
|
||||
0, /* tp_clear */
|
||||
0, /* tp_richcompare */
|
||||
0, /* tp_weaklistoffset */
|
||||
0, /* tp_iter */
|
||||
0, /* tp_iternext */
|
||||
0, /* tp_methods */
|
||||
0, /* tp_members */
|
||||
0, /* tp_getset */
|
||||
&PyBaseObject_Type, /* tp_base */
|
||||
0, /* tp_dict */
|
||||
0, /* tp_descr_get */
|
||||
0, /* tp_descr_set */
|
||||
0, /* tp_dictoffset */
|
||||
0, /* tp_init */
|
||||
0, /* tp_alloc */
|
||||
basestring_new, /* tp_new */
|
||||
0, /* tp_free */
|
||||
};
|
||||
|
||||
static char string_doc[] =
|
||||
"str(object) -> string\n\
|
||||
\n\
|
||||
|
@ -2893,7 +2947,7 @@ PyTypeObject PyString_Type = {
|
|||
string_methods, /* tp_methods */
|
||||
0, /* tp_members */
|
||||
0, /* tp_getset */
|
||||
0, /* tp_base */
|
||||
&PyBaseString_Type, /* tp_base */
|
||||
0, /* tp_dict */
|
||||
0, /* tp_descr_get */
|
||||
0, /* tp_descr_set */
|
||||
|
|
|
@ -5835,7 +5835,7 @@ PyTypeObject PyUnicode_Type = {
|
|||
unicode_methods, /* tp_methods */
|
||||
0, /* tp_members */
|
||||
0, /* tp_getset */
|
||||
0, /* tp_base */
|
||||
&PyBaseString_Type, /* tp_base */
|
||||
0, /* tp_dict */
|
||||
0, /* tp_descr_get */
|
||||
0, /* tp_descr_set */
|
||||
|
@ -5859,6 +5859,8 @@ void _PyUnicode_Init(void)
|
|||
strcpy(unicode_default_encoding, "ascii");
|
||||
for (i = 0; i < 256; i++)
|
||||
unicode_latin1[i] = NULL;
|
||||
if (PyType_Ready(&PyUnicode_Type) < 0)
|
||||
Py_FatalError("Can't initialize 'unicode'");
|
||||
}
|
||||
|
||||
/* Finalize the Unicode implementation */
|
||||
|
|
|
@ -1905,6 +1905,7 @@ _PyBuiltin_Init(void)
|
|||
SETBUILTIN("object", &PyBaseObject_Type);
|
||||
SETBUILTIN("staticmethod", &PyStaticMethod_Type);
|
||||
SETBUILTIN("str", &PyString_Type);
|
||||
SETBUILTIN("string", &PyBaseString_Type);
|
||||
SETBUILTIN("super", &PySuper_Type);
|
||||
SETBUILTIN("tuple", &PyTuple_Type);
|
||||
SETBUILTIN("type", &PyType_Type);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue