1. Python / Говнокод #19025

    −24

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    class Receiver(object):
        def __init__(self, data):
            command_name = data['command']
            command_class_name = support.underscore_to_camelcase(command_name)
            exec("from .commands.{name} import {klass}".format(name=command_name, klass=command_class_name))
            command_class = eval(command_class_name)
            self._command_object = command_class(data)

    Вернулся на питон после руби. Отсутствие автолоада и полного понимания как работает импорт толкает на это.
    В commands лежат модули вида имя_команды.py с классом ИмяКоманды. data приходит извне и содержит тип команды, на каждую из которых существует класс.
    Цель: иметь возможность добавлять новые команды просто создав файл не дописывая никаких импортов.
    Говно или не совсем?

    Запостил: FlySnake, 14 Ноября 2015

    Комментарии (5) RSS

    • Джанго так делает. Кажется там используется модуль imp. Посмотри. Твой код говно небезопасное
      Ответить
      • нашёл importlib
        module = importlib.import_module(".commands.{name}".format(name=command_name), __package__)
        command_class = getattr(module, command_class_name)
        Ответить
        • >command_class_name
          Тоже попахивает. Не лучше ли хранить там ссылку на сам класс вместо его имени?
          >support.underscore_to_camelcase
          Тоже бесполезная по сути обфускация.
          Ты ведь пыхомакака, да?
          Ответить
          • там приходит строка от сервера
            underscore_to_camelcase - не обфускация. просто с сервера приходят команды в змеином_кейсе (люблю его), а классы принято именовать в ВерблюжемКейсе.
            Ответить
    • vanished
      Ответить

    Добавить комментарий