python中switcher给出的对象存在问题

python中switcher给出的对象存在问题,python,class,object,switch-statement,Python,Class,Object,Switch Statement,当我试图创建一个类依赖于输入的对象时,我似乎对开关式代码有问题 假设有两个班,一班和二班。当我创建一个对象时,它们都会给我一条消息“object of Class created” 还有一个新类,它有一个方法,在我创建对象时使用字符串。这个字符串是“Class1”或“Class2” 这里有一个棘手的部分:基于这个字符串,我创建了一个object Class1或object Class2,如下所示: def type_to_object(self, type): switcher

当我试图创建一个类依赖于输入的对象时,我似乎对开关式代码有问题

假设有两个班,一班和二班。当我创建一个对象时,它们都会给我一条消息“object of Class created” 还有一个新类,它有一个方法,在我创建对象时使用字符串。这个字符串是“Class1”或“Class2”

这里有一个棘手的部分:基于这个字符串,我创建了一个object Class1或object Class2,如下所示:

def type_to_object(self, type):
        switcher = {
            "Class1": Class1(),
            "Class2": Class2(),
        }
        return switcher.get(type, "Invalid Class")
现在,这在类似的案例中效果很好。这里的问题是,它似乎创建了两个对象,即使在调用该方法时我只得到了一个对象(显然)。我这样说是因为参考我上面所说的,我得到了消息“创建了类1的对象”和“创建了类2的对象”

先谢谢你


PS:看起来非常奇怪的是,它不应该输入所有的大小写,只有一个大小写等于type

问题是您在switcher字典中创建了两个类的实例

请尝试以下方法:

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)

谢谢,你说得对!只是一件小事。也许是因为我习惯了其他语言,但为什么在切换器中它会在专栏后面?它不应该只创建所选案例的对象吗?