【问题标题】:About class and __str__关于类和 __str__
【发布时间】:2012-07-08 13:51:04
【问题描述】:

当我打印我的类的一个实例时,我尝试返回一个字符串值。看来这不应该像我希望的那样工作。

class oObject (object):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return str(self.value)
    def __repr__(self):
        return str(self.value)

new = oObject(50)
# if I use print it's Okay
print new
# But if i try to do something like that ...
print new + '.kine'

【问题讨论】:

  • 使用print str(new)+'.kine',在连接对象时,Python 不会将对象强制转换为字符串。

标签: python string class


【解决方案1】:

尝试显式转换为字符串:

print str(new) + '.kine'

您也可以使用格式字符串:

print '{}.kine'.format(new)

【讨论】:

    【解决方案2】:

    为它覆盖__add__

    class oObject (object):
        def __init__(self, value):
            self.value = value
        def __str__(self):
            return str(self.value)
        def __repr__(self):
            return str(self.value)
        def __add__(self,val):
            return str(self.value)+val
    
    new = oObject(50)
    '''if I use print it's Okay'''
    print new
    '''But if i try to do something like that ...'''
    print new + '.kine'   #prints 50.kine
    

    【讨论】:

    • 相当多的矫枉过正,你不觉得吗? Python 不会自动强制其他对象,最好在实例上使用显式 str() 调用。
    • @MartijnPieters 是的,但是如果他想将其隐式转换为字符串,那很好。
    • 显式优于隐式。
    • 没关系!我使用一个返回大量字符串的 API,每次都转换我的值非常无聊。但也许我错了?
    • @MObject 如果您在代码中的太多地方使用+ 的对象,那么__add__ 很好,否则如果它只出现几次,那么最好是 明确的.
    【解决方案3】:

    Python 在打印之前将整个表达式的结果转换为字符串,而不是单个项目。在连接之前将您的对象实例转换为字符串:

    print str(new) + '.kine'
    

    Python 是一种强类型语言,在使用“+”等运算符时不会自动将项目转换为字符串。

    【讨论】:

      【解决方案4】:

      尝试print new 以查看您的.__str__() 定义是否有效。 print 在内部调用它。但是,+ 运算符不使用隐式转换为字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-03-28
        • 1970-01-01
        • 1970-01-01
        • 2020-09-23
        • 1970-01-01
        • 1970-01-01
        • 2020-04-22
        • 2019-04-28
        相关资源
        最近更新 更多