如何打印一个Python类?

6 投票
2 回答
1278 浏览
提问于 2025-04-17 16:20

我有一个类,这个类里面有好几个函数(大部分是用来解析一些东西、获取所有必要的信息并打印出来的)。我试着打印这个类的内容,但得到的结果是<_main_.TestClass instance at 0x0000000003650888>。以下是代码示例:

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

当我打印类外的函数时,一切都正常。我哪里做错了,怎样才能打印出这个类的内容呢?

谢谢!

2 个回答

1

看起来你想打印的是一个类的实例,而不是这个类本身。你需要定义一个 __str____repr__ 方法,这样在打印这个实例的时候就会返回一个字符串。

可以参考这里: http://docs.python.org/2/reference/datamodel.html#object.__repr__

还有这里: http://docs.python.org/2/reference/datamodel.html#object.__str__

7

这是正常的行为。Python 不能知道一个类是怎么表示的,除非你定义一个 __str____repr__ 方法来给这个类一个字符串的表示。

具体来说,__repr__ 通常是用来生成一个可以被评估回类似对象的字符串(在你的例子中,就是 TestClass())。默认的 __repr__ 会输出你看到的 <__main__.TestClass instance at 0xdeadbeef> 这样的内容。

示例 __repr__:

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

__str__ 可以被定义为生成一个人类可读的“描述”,如果没有提供这个方法,你就会得到 __repr__ 的结果。

示例 __str__:

def __str__(self):
    return "(TestClass instance)"

撰写回答