проблема с объектом, заданным переключателем в Python - PullRequest
0 голосов
/ 07 ноября 2019

Кажется, у меня есть проблема с переключаемым кодом, когда я пытаюсь создать объект, где его класс зависит от ввода.

Допустим, есть два класса, Class1 и Class2. Они оба, когда я создаю объект, выдают мне сообщение «Объект класса <1 или 2> создан». Затем появляется этот новый класс, у которого есть метод, который принимает строку при создании объекта. эта строка "Class1" или "Class2".

Здесь сложная часть: на основе этой строки я создаю объект Class1 или объект Class2 следующим образом:

def type_to_object(self, type):
        switcher = {
            "Class1": Class1(),
            "Class2": Class2(),
        }
        return switcher.get(type, "Invalid Class")

Теперь этохорошо работал в подобных случаях. Проблема здесь в том, что создается впечатление, что оба объекта создаются, даже если я получаю только один взамен при вызове метода (очевидно). Я говорю это потому, что, ссылаясь на то, что я сказал выше, я получаю как сообщения «Объект класса 1 создан», так и «Объект класса 2 создан»

Заранее спасибо

PS: что это кажетсясупер странно, что он не должен входить во все случаи, только один, равный типу

1 Ответ

0 голосов
/ 07 ноября 2019

Проблема в том, что вы создаете экземпляры обоих ваших классов в словаре переключателя.

Попробуйте вместо этого:

class Class1:
    def __init__(self):
        self.who_am_i = "Class1"


class Class2:
    def __init__(self):
        self.who_am_i = "Class2"


def type_to_object(class_type):
    switcher = {
        "Class1": Class1,  # No parentheses here, we don't want an instance. Just a type
        "Class2": Class2,  #
    }
    selected_class = switcher.get(class_type, None)
    if selected_class is None:
        raise RuntimeError("Invalid Class")
    return selected_class()  # Now, we use parentheses: we want to create an instance


c = type_to_object("Class1")
print(c.who_am_i)
...