Question on Standard Types

Bengt Richter bokr at oz.net
Sun Sep 7 14:39:31 EDT 2003


On Sun, 7 Sep 2003 13:18:57 -0400, "John Roth" <newsgroups at jhrothjr.com> wrote:

>
>"hostmaster" <alpot at mylinuxsite.com> wrote in message
>news:mailman.1062951612.13844.python-list at python.org...
>> Hi,
>>
>> I'm quite new to Python and I am reading this book called 'Core Python
>> Programming' by Wesley J. Chun.  I think that this is not a new book but
>> I believe some of the points are still valid.
>>
>> There is this part in the book where it says:
>>
>> "In Python, standard types are not classes, so creating integers and
>> strings does not involve instantiation".
I think that is out of date.

>>
>> But later in the book, it talks about 'numeric objects' created when a
>> numeric literal is assigned to a reference.
>>
>> So my question now is, if standard types are objects, shouldn't they
>> have classes as well ? Isn't it that a class is the blueprint of an
>> object? If they don't have a class to begin with, how are these objects
>> created?
By "standard types" you mean int and str etc.? Try interactive help for sume suggestive info:

 >>> help(int)
 Help on class int in module __builtin__:

 class int(object)
  |  int(x[, base]) -> integer
  |
  |  Convert a string or number to an integer, if possible.  A floating point
  |  argument will be truncated towards zero (this does not include a string
  |  representation of a floating point number!)  When converting a string, use
  |  the optional base.  It is an error to supply a base when converting a
  |  non-string. If the argument is outside the integer range a long object
  |  will be returned instead.
  |
  |  Methods defined here:
  |
  |  __abs__(...)
  |      x.__abs__() <==> abs(x)
  |
  |  __add__(...)
  |      x.__add__(y) <==> x+y
  |
 
  ...
  (etc.)

 >>> help(str)
 Help on class str in module __builtin__:

 class str(basestring)
  |  str(object) -> string
  |
  |  Return a nice string representation of the object.
  |  If the argument is a string, the return value is the same object.
  |
  |  Method resolution order:
  |      str
  |      basestring
  |      object
  |
  |  Methods defined here:
  |
  |  __add__(...)
  |      x.__add__(y) <==> x+y

  ...
  (etc.)

>
>He's trying to make a fairly subtle point. At least, it's subtle until
>you get into the nuts and bolts.
>
>The point is that class instances are a single type, regardless of
You don't mean instances of classes are a single type, I assume. You mean
classes themselves are instances of a single type class, right?
(Except old-style classes, which are of type classobj).

>the class. So while it's perfectly true to say what he did, it has
I don't know how you are reading it. It seems out of date to me.

>very little practical meaning unless you attempt to do an operation
>on, say, an integer that depends on something that's unique to
>an instance.

You can now subclass int and str etc., which has real and practical meaning though.
And it's a pretty strong indication that int and str are classes of some kind ;-)

Regards,
Bengt Richter




More information about the Python-list mailing list