【问题标题】:python class to print bash colorspython类打印bash颜色
【发布时间】:2020-05-28 09:59:39
【问题描述】:

我有可以打印到屏幕上的 python 脚本,有时我希望它们是粗体或绿色,有时是粗体和绿色。但我似乎无法弄清楚如何做到这两点。

class colortext():
    def __init__(self, text:str):
        self.text = text
        self.ending = '\033[0m'

    def bold(self):
        return '\033[1m' + self.text + self.ending

    def green(self):
        return '\033[92m' + self.text + self.ending


print(colortext('hello').bold().green())

AttributeError: 'str' object has no attribute 'green'

【问题讨论】:

  • 它们不是bash 颜色;它们是终端处理的 ANSI 转义序列。

标签: python string class printing colors


【解决方案1】:

我认为更好的策略是让您的方法将控制序列添加到用于在 __str__ 方法中构造最终字符串的列表中:

class ColorText():
    def __init__(self, text:str):
        self.text = text
        self.ending = '\033[0m'
        self.sequences = []
    def bold(self):
        self.sequences.append('\033[1m')
        return self
    def green(self):
        self.sequences.append('\033[92m')
        return self
    def __str__(self):
        return ''.join(self.sequences) + self.text + self.ending  # ''.join(chain would probably work better

【讨论】:

    【解决方案2】:

    因为您在 boldgreen 方法中返回一个字符串。我认为您实际上想要返回对 colortext 对象本身的引用。所以修改这些方法中的文本并返回self。此外,如果您希望它在print 中调用它时打印字符串,请定义__str__ 函数。试试:

    class colortext():
        def __init__(self, text:str):
            self.text = text
            self.ending = '\033[0m'
    
        def __str__(self):
            return self.text
    
        def bold(self):
            self.text = '\033[1m' + self.text + self.ending
            return self
    
        def green(self):
            self.text = '\033[92m' + self.text + self.ending
            return self
    
    print(colortext('hello').bold().green())
    

    【讨论】:

    • 看起来像 Java :D
    猜你喜欢
    • 2016-03-18
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-27
    • 2013-11-12
    • 2014-05-18
    相关资源
    最近更新 更多