如何使用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()?