使Python bool打印'开'或'关'而不是'真'或'假'

Zaz*_*Zaz 6 python printing boolean

制作变量的最佳方法是什么,就像bool一样,但是打印On或者Off不是True或者False?目前该计划正在印刷:Color: True,Color: On但更有意义.

为了记录,我最初尝试创建一个OnOff继承自bool以下的类:

class OnOff(bool):
    def __str__(self):
        if self: return 'On'
        else: return 'Off'
Run Code Online (Sandbox Code Playgroud)

从评论中,我现在明白这bool是一个单身人士,这就是为什么这个失败的原因:

Traceback (most recent call last):
    class OnOff(bool):
TypeError: Error when calling the metaclass bases
    type 'bool' is not an acceptable base type
Run Code Online (Sandbox Code Playgroud)

Joc*_*zel 19

print ("Off", "On")[value]也工作(因为(False, True) == (0,1))


Rah*_*hul 10

def Color(object):

    def __init__(self, color_value=False):
        self.color_value = color_value

    def __str__(self):
       if self.color_value:
          return 'On'
       else:
          return 'Off'

    def __cmp__(self, other):
        return self.color_value.__cmp__(other.color_value)
Run Code Online (Sandbox Code Playgroud)

虽然这可能对你来说太过分了.:)

  • 实际上,`__nonzero__`钩子实现了真值测试. (2认同)

Mik*_*one 5

我最喜欢的技巧是使用bool来索引数组:

return "Color: {0}".format(['Off','On'][has_color])
Run Code Online (Sandbox Code Playgroud)

需要说明的是,此数值为False,True,0,或1.如果您还有其他内容,则必须先将其转换为布尔值.