Integers have docstring for int()
Peter Abel
PeterAbel at gmx.net
Thu Aug 12 07:27:18 EDT 2004
Christian Tismer <tismer at stackless.com> wrote in message news:<mailman.1515.1092243911.5135.python-list at python.org>...
> Skip Montanaro wrote:
>
> > Andrew> I accidentally discovered that all the basic types in Python
> > Andrew> have docstrings that describe the functions to create them. For
> > Andrew> integers, you get:
> > ...
> >
> > Andrew> This seems a little unexpected to me; is there any particular
> > Andrew> reason for this behaviour?
> >
> > Why should this be unexpected? If you execute
> >
> > print int.__doc__
> >
> > you get its docstring. Since the __doc__ attribute is attached to the class
> > it will be found when the search starts at an instance of the class as well.
>
> Sure, this is why. But I can understand the feeling a little
> bit, because the docstring describes what a __call__ to the
> type object does, although the instance is not even callable.
>
> This may origin in the fact, that int and str have been just
> functions a short while back, and the docstrings mainly describe
> that function call. The docs are less representative
> for int being the whole class. One would perhaps expect
> a short description of what an int can do.
> On the other hand, int() perceived as a function still needs
> its documentation as it is now.
>
> Like we have the __call__ attribute of a type, which describes
> the call of the *instance*, and this differs completely from
> how the type is called, would it make sense to change the
> __doc__ lookup of types vs. instances in some way?
>
> The current doc strings would probably better fit into int.__new__
> or int.__init__, while the class __doc__ might talk about instances.
> (although I even think no documentation would be better than
> the existing docs in the case of strings and ints, which
> show up in some object browsers, and you really don't want to
> read long musings about strings while inspecting a string value
> in the PythonWin debugger).
>
> ciao - chris
The following seems to be unaccustomed, but it's good Python:
>>> class myInt(int):
... """Instance of myInt"""
... def __init__(self,val):
... self=int(val)
...
>>> i=myInt(10)
>>> type(i)
<class '__main__.myInt'>
>>> i.__doc__
'Instance of myInt'
>>> print myInt.__doc__
Instance of myInt
>>> j=2
>>> print j.__doc__
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.
>>> type(j)
<type 'int'>
>>> j+i
12
>>>
At my knowledge, since Python 2.1?? or 2.2?? basic types are like or are classes
where you can inherit from. So their behavior is class-like.
Regards
Peter
More information about the Python-list
mailing list