我想扩展我的对象的__str__()
方法。 str(obj)
目前显示为:
<mymodule.Test object at 0x2b1f5098f2d0>
我喜欢将地址作为唯一标识符,但我想添加一些属性。在保持地址部分的同时扩展它的最佳方法是什么?我希望看起来像这样:
<mymodule.Test object at 0x2b1f5098f2d: name=foo, isValid=true>
我没有看到任何存储地址的属性。我正在使用python 2.4.3。
编辑:很高兴知道如何使用__repr __()
解决方案(对于python 2.4.3):
def __repr__(self):
return "<%s.%s object at %s, name=%s, isValid=%s>" % (self.__module__,
self.__class__.__name__, hex(id(self)), self.name, self.isValid)
答案 0 :(得分:5)
您可以使用id(obj)
获取地址。您可能希望更改__repr__()
方法而不是__str__()
。这是在Python 2.6 +中执行此操作的代码:
class Test(object):
def __repr__(self):
repr_template = ("<{0.__class__.__module__}.{0.__class__.__name__}"
" object at {1}: name={0.name}, isValid={0.isValid}>")
return repr_template.format(self, hex(id(self)))
测试 用:
test = Test()
test.name = "foo"
test.isValid = True
print repr(test)
print str(test)
print test
通过使用"%s"
之类的字符串格式化操作而不是更清晰的str.format()
语法,您可以轻松地在旧版本的Python中执行相同的操作。如果您要使用str.format()
,还可以使用模板中的{1:#x}
并将参数1从hex(id(self))
更改为id(self)
,从而使用其内置的十六进制格式设置功能
答案 1 :(得分:1)
class Mine(object):
def __str__(self):
return object.__str__(self) + " own attributes..."