如何使用print()打印类或类的对象?

我正在学Python的绳索。 当我尝试使用print()函数print() Foobar类的对象时,我得到如下输出:

<__main__.Foobar instance at 0x7ff2a18c>

有没有一种方法可以设置类和它的对象的打印行为(或字符串表示)? 例如,当我在类对象上调用print()时,我想以特定的格式打印其数据成员。 如何在Python中实现这一点?

如果您熟悉C ++类,则可以通过为类添加friend ostream& operator << (ostream&, const Foobar&)方法来实现标准ostream的上述功能。


>>> class Test:
...     def __repr__(self):
...         return "Test()"
...     def __str__(self):
...         return "member of Test"
... 
>>> t = Test()
>>> t
Test()
>>> print(t)
member of Test

__str__方法是打印时发生的情况, __repr__方法是使用repr()函数时(或者当您使用交互式提示查看时)发生的情况。 如果这不是最Pythonic的方法,我很抱歉,因为我仍然在学习 - 但它是有效的。

如果没有给出__str__方法,Python会打印__repr__的结果。 如果您定义了__str__而不是__repr__ ,Python将使用您在上面看到的__repr__ ,但仍然使用__str__进行打印。


正如__repr__所说,这是由您的班级中的__repr__方法定义的。

repr()的文档:

对于很多类型,这个函数会尝试返回一个字符串,当传递给eval() ,该字符串将产生一个具有相同值的对象,否则该表示是一个用尖括号括起来的字符串,它包含对象类型的名称附加信息通常包括对象的名称和地址。 一个类可以通过定义__repr__()方法来控制此函数为其实例返回的__repr__()

鉴于以下课程测试:

class Test:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def __repr__(self):
        return "<Test a:%s b:%s>" % (self.a, self.b)

    def __str__(self):
        return "From str method of Test: a is %s, b is %s" % (self.a, self.b)

..它将在Python shell中采取以下方式:

>>> t = Test(123, 456)
>>> t
<Test a:123 b:456>
>>> print repr(t)
<Test a:123 b:456>
>>> print(t)
From str method of Test: a is 123, b is 456
>>> print(str(t))
From str method of Test: a is 123, b is 456

如果没有定义__str__方法,则print(t) (或print(str(t)) )将使用__repr__的结果

如果没有定义__repr__方法,则使用默认值,这非常相当于..

def __repr__(self):
    return "<%s instance at %s>" % (self.__class__.__name__, id(self))

如果没有特定的格式,可以应用于任何类的通用方法如下:

class Element:
    def __init__(self, name, symbol, number):
        self.name = name
        self.symbol = symbol
        self.number = number

    def __str__(self):
        return str(self.__class__) + ": " + str(self.__dict__)

接着,

elem = Element('my_name', 'some_symbol', 3)
print(elem)

产生

__main__.Element: {'symbol': 'some_symbol', 'name': 'my_name', 'number': 3}
链接地址: http://www.djcxy.com/p/13521.html

上一篇: How to print a class or objects of class using print()?

下一篇: Why should text files end with a newline?