用于打印bash颜色的python类

用于打印bash颜色的python类,python,string,class,printing,colors,Python,String,Class,Printing,Colors,我有可以打印到屏幕上的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

我有可以打印到屏幕上的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'

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

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())

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

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())

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

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

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

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

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