我们假设我们有几个不同的类:ClassA
,ClassB
,ClassC
和ClassD
。我有一个我将根据不同情况设置的变量。我知道它会提前发生什么,但是每次我需要更改时,我都不想在不同的文件中重写许多不同的代码行。它不是用户设置。
现在我们有了
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中运行相同的类。
答案 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
是否是推荐的方法。