python класс для печати bash цвета - PullRequest
1 голос
/ 12 февраля 2020

У меня есть 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'

Ответы [ 2 ]

3 голосов
/ 12 февраля 2020

Поскольку вы возвращаете строку в методах bold и green. Я думаю, что вы действительно хотите вернуть ссылку на сам объект 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())
1 голос
/ 12 февраля 2020

Я думаю, что лучшая стратегия для ваших методов - добавить управляющие последовательности в список, который используется для построения окончательной строки в методе __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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...