@maffiozi

Как правильно организовать класс, для генерации методов в нем?

class Color:
    def __init__(self):
        self.Red = '\033[91m'
        self.Green = '\033[92m'
        self.Blue = '\033[94m'
        self.Cyan = '\033[96m'
        self.White = '\033[97m'
        self.Yellow = '\033[93m'
        self.Magenta = '\033[95m'
        self.Grey = '\033[90m'
        self.Black = '\033[90m'
        self.Default = '\033[99m'
        self.End_color = '\033[0m'

    def print_green(self, data):
        print(self.Green + data + self.End_color)

    def print_default(self, data):
        print(self.Default + data + self.End_color)

color = Color()
color.print_green("Какой то зеленый текст")
color.print_default("Какой то деволтный текст")


Возможными как то сделать так, что бы не писать метод под каждый цвет?

нужно сделать абстрактный метод и его переопределить видимо, но пока не могу понять реализацию этого действия.
  • Вопрос задан
  • 201 просмотр
Решения вопроса 2
ri_gilfanov
@ri_gilfanov
Web- and desktop-developer
Быть может лучше принимать ещё один аргумент при вызове?

class Color:
    def __init__(self):
        self.red = '\033[91m'
        self.green = '\033[92m'
        self.blue = '\033[94m'
        self.cyan = '\033[96m'
        self.white = '\033[97m'
        self.yellow = '\033[93m'
        self.magenta = '\033[95m'
        self.grey = '\033[90m'
        self.black = '\033[90m'
        self.default = '\033[99m'
        self.end_color = '\033[0m'

    def color_print(self, data, color):
        print(getattr(self, color) + data + self.end_color)

obj = Color()
obj.color_print('Текст красного цвета', 'red')
obj.color_print('Текст зелёного цвета', 'green')
obj.color_print('Текст синего цвета', 'blue')

Реализация очень топорная, но как вариант.

Если очень нужно генерировать методы классов в реальном времени, придётся лезть в мета-программирование.

Пример решения схожей задачи: https://stackoverflow.com/questions/13194180/dynam...
Ответ написан
Комментировать
adugin
@adugin Куратор тега Python
Проще и нагляднее принимать аргумент. Но если охота экспериментов, можно начать с чего-то такого:
def cprint(text):
    class colored():
        def __getattribute__(self, color):
            print(f'text={text}, color={color}')
    return colored()

cprint('test').green

А вообще это всё к вопросу декораторов, имхо.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы