diff options
author | Guido van Rossum <guido@python.org> | 2002-05-24 19:01:59 (GMT) |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2002-05-24 19:01:59 (GMT) |
commit | cacfc07d083286e80b6f86939d466e186f7ea3c0 (patch) | |
tree | 87e5221791901acdca69ef823d93d470679fa49c /Objects/stringobject.c | |
parent | 9ee4b94f51d19a37db3b93222b5e15c8379db78d (diff) | |
download | cpython-cacfc07d083286e80b6f86939d466e186f7ea3c0.zip cpython-cacfc07d083286e80b6f86939d466e186f7ea3c0.tar.gz cpython-cacfc07d083286e80b6f86939d466e186f7ea3c0.tar.bz2 |
- 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.
Diffstat (limited to 'Objects/stringobject.c')
-rw-r--r-- | Objects/stringobject.c | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/Objects/stringobject.c b/Objects/stringobject.c index 668668c..27b3af4 100644 --- a/Objects/stringobject.c +++ b/Objects/stringobject.c @@ -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 */ |