[Python-3000] Heaptypes (original) (raw)

Thomas Heller theller at ctypes.org
Wed Jul 11 16:39:00 CEST 2007


Guido van Rossum schrieb:

There are currently three "string" types, here shown with there repr styles:

- str = 'same as unicode in 2.x' - bytes = b'new, mutable list of small ints' - str8 = s'same as str in 2.x' The s'...' notation means it's an 8-bit string (not a bytes array). This is not supported in the syntax; it's just used on output. (Use str8(b'...') to create one of these.) I'm still hoping to remove this type before the release, but it appears to be still necessary so far. I don't know enouch about ...CallFunction to help you with the rest.

Let me explain it in other words. This code creates a new type:

ht = type("name", (object,), {}) [47054 refs] ht <class '__main__.name'> [47093 refs]

The 'name' attribute is a (unicode) string:

ht.name 'name' [47121 refs]

But I can also create a type in this way:

ht = type(str8(b"name"), (object,), {}) [47208 refs]

The name attribute is a str8 instance:

ht.name s'name' [47236 refs]

Printing the type triggers an assertion:

ht Assertion failed: obj && PyUnicode_Check(obj), file \svn\py3k-struni\Objects\unicodeobject.c, line 630 C:\svn\py3k-struni\PCbuild>

because parts of the code assume that the 'name' is a (unicode) string.

Thomas



More information about the Python-3000 mailing list