首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何为类对象创建自定义字符串表示?

如何为类对象创建自定义字符串表示?
EN

Stack Overflow用户
提问于 2011-02-08 19:27:12
回答 4查看 246K关注 0票数 236

考虑这个类:

class foo(object):
    pass

默认的字符串表示如下所示:

>>> str(foo)
"<class '__main__.foo'>"

如何才能使其显示为自定义字符串?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-02-08 19:30:44

在类的元类中实现__str__()__repr__()

class MC(type):
  def __repr__(self):
    return 'Wahaha!'

class C(object):
  __metaclass__ = MC

print(C)

如果你指的是一种可读的字符串化,请使用__str__,对于明确的表示使用__repr__

票数 312
EN

Stack Overflow用户

发布于 2011-02-08 19:30:28

class foo(object):
    def __str__(self):
        return "representation"
    def __unicode__(self):
        return u"representation"
票数 30
EN

Stack Overflow用户

发布于 2018-01-12 16:52:14

如果必须在__repr____str__之间进行选择,请选择第一个,因为在默认情况下,实现__str__会在未定义__repr__时调用它。

自定义Vector3示例:

class Vector3(object):
    def __init__(self, args):
        self.x = args[0]
        self.y = args[1]
        self.z = args[2]

    def __repr__(self):
        return "Vector3([{0},{1},{2}])".format(self.x, self.y, self.z)

    def __str__(self):
        return "x: {0}, y: {1}, z: {2}".format(self.x, self.y, self.z)

在本例中,repr再次返回一个可以直接使用/执行的字符串,而str更适合作为调试输出。

v = Vector3([1,2,3])
print repr(v)    #Vector3([1,2,3])
print str(v)     #x:1, y:2, z:3
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4932438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档