Lately, I've been programming a lot in Python which has proven to be quite enlightening for me. My method of learning a new programming language has been to solve a problem through software and learn syntax, functions and layout on my journey. Normally, I'd look at pre-existing libraries or even source code in that language to get an idea of the things that are available. Python was no different, but to aid my learning, I chose to use an Interactive interface to Python: iPython.
One thing always puzzled me: if I created an object, say, myObject as instance A (that is to say A = myObject()
), if I typed in A
, how could I control the output without viewing something like <instance 'myObject' object at 0xlocation>
but instead show something more useful?
Nowhere could I find it explicitly written although now I know what to look for, I see documentation on this. When calling A
in either iPython or Python, the interpreter looks for A.__repr__()
to display some useful information. I took the opportunity to display a summary of the data contained by the object. This is done by returning a string object (or str
in Python) when creating the class. Likewise, if I were to write print A
, Python would first look for A.__str__()
and, if it was undefined, reverts to returning A.__repr__()
. Thus, it is sometimes useful to display more information in the __repr__()
call and leave the __str__()
for minimalist information (although this will depend on the application). For example:
class myObject:
def __init__(self, contents):
self.contents = contents
def __repr__(self):
return "Contents of container: " + str(self.contents)
def __str__(self):
return str(self.contents)
Indeed, one may notice the difference between the __repr__()
function of a NumPy array call and one from __str__()
: the former including the words "array" at the start and encloses the output from the __str__()
function call.
0 comments:
Post a Comment