根据变量名运行不同的类?

时间:2017-12-04 12:14:00

标签: python python-3.x class

我们假设我们有几个不同的类:ClassAClassBClassCClassD。我有一个我将根据不同情况设置的变量。我知道它会提前发生什么,但是每次我需要更改时,我都不想在不同的文件中重写许多不同的代码行。它不是用户设置。

现在我们有了 Variable = ClassX

所以,我们假设我将Variable设置为ClassA。如何使用它来调用ClassA?例如,我知道我可以这样做:

Variable = ClassA
if Variable == ClassA:
     # Call ClassA and run it
elif Variable == ClassB:
     # Call ClassB and run it
elif Variable == ClassC:
     # Call ClassC and run it
elif Variable == ClassD:
     # Call ClassD and run it

但是,我想做这样的事情:

Variable = ClassA
V = Variable()

这可能吗?

编辑: 更多细节...

所以我在这个场景中使用了3个文件。

File1.py:

# Class = ClassA
# Class = ClassB
Class = ClassC
# Class = ClassD
...
if Class == "ClassA":
    c = ClassSystem.ClassA
    short_name = c.get_short_name()
elif Class == "ClassB":
    c = ClassSystem.ClassB
    short_name = c.get_short_name()
elif Class == "ClassC":
    c = ClassSystem.ClassC
    short_name = c.get_short_name()
elif Class == "ClassD":
    c = ClassSystem.ClassD
    short_name = c.get_short_name()
...

File2.py:

from Folder.File1 import short_name
from Folder.ClassSystem import *
...
S = short_name()
S.get_information()

这似乎不起作用。 File2引用file1中的变量。然后,我需要File2使用File1中的变量在ClassSystem中运行相同的类。

2 个答案:

答案 0 :(得分:2)

是的,完全有可能。不过用if来做,最紧凑的方法是包括类对象的类名字典。

然后,您可以键入字典并调用结果类:

cls_dict = {c.__name__: c for c in {ClassA, ClassB}}
v = 'ClassA'
cls_dict[v]()

当然,可以改变这组类,以包括你想要的任何其他对象。

答案 1 :(得分:1)

您可以使用eval

c_name = 'ClassA'
obj = eval(c_name)()

但我不确定eval是否是推荐的方法。