7.3 Type Categories Revisited
Now that we've seen all of Python's
core
built-in
types, let's take a look at some of the properties
they share.
Table 7-3 classifies all the types
we've seen, according to the type categories we
introduced earlier. Objects share operations according to their
category—for instance, strings, lists, and tuples all share
sequence operations. Only mutable objects may be changed in-place.
You can change lists and dictionaries in-place, but not numbers,
strings, or tuples. Files only export methods, so mutability
doesn't really apply (they may be changed when
written, but this isn't the same as Python type
constraints).
Table 7-3. Object classifications|
Numbers
|
Numeric
|
No
|
Strings
|
Sequence
|
No
|
Lists
|
Sequence
|
Yes
|
Dictionaries
|
Mapping
|
Yes
|
Tuples
|
Sequence
|
No
|
Files
|
Extension
|
n/a
|
Later, we'll see that objects we
implement
with classes can pick and choose from
these categories arbitrarily. For instance, if you want to provide a
new kind of specialized sequence object that is consistent with
built-in sequences, code a class that overloads things like indexing
and concatenation:
class MySequence:
def __getitem__(self, index):
# Called on self[index], others
def __add__(self, other):
# Called on self + other
and so on. You can also make the new object mutable or not, by
selectively implementing methods called for in-place change
operations (e.g., __setitem__ is called on
self[index]=value assignments).
It's also possible to implement new objects in C, as
C extension types. For these, you fill in C function pointer slots to
choose between number, sequence, and mapping operation sets.
|
|