6

I have a class that contains several functions(most of it contains code that parses smth., get all necessary info and print it). I'm trying to print a class but i get smth. like <_main_.TestClass instance at 0x0000000003650888>. Code sample:

from lxml import html
import urllib2
url = 'someurl.com'


class TestClass:

    def testFun(self):
        f = urllib2.urlopen(url).read()
        #some code

        print 'Value for ' +url+ ':', SomeVariable

    def testFun2(self):
        f2 = urllib2.urlopen(url).read()
        #some code

        print 'Value2 for ' +url+ ':', SomeVariable2

test = TestClass()
print test

When i print functions out of class - all is ok. What i'm doing wrong and how can I print a class?

Thanks!

Alex A
  • 107
  • 2
  • 11

2 Answers2

7

That's the expected behaviour. Python can't know how the class is represented unless you define a __str__ or __repr__ method to give the class a string representation.

To be clear: __repr__ is usually defined to produce a string that can be evaluated back into a similar object (in your case, TestClass()). The default __repr__ prints out the <__main__.TestClass instance at 0xdeadbeef> thing you see.

Example __repr__:

def __repr__(self):
    return self.__class__.__name__ + '()' # put constructor arguments in the ()

__str__ can be defined to produce a human-readable "description" of the class. If not supplied, you get __repr__.

Example __str__:

def __str__(self):
    return "(TestClass instance)"
nneonneo
  • 171,345
  • 36
  • 312
  • 383
1

It looks like you want to print an instance of the class rather than the class itself. Define a __str__ or __repr__ method that returns a string to be used when printing the instance.

See: http://docs.python.org/2/reference/datamodel.html#object.__repr__

http://docs.python.org/2/reference/datamodel.html#object.__str__

samfrances
  • 3,405
  • 3
  • 25
  • 40