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

标签 python python-3.x class

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

所以现在我们有 变量 = 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 个文件用于此场景。

文件1.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()
...

文件2.py:

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

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

最佳答案

是的,完全有可能。不过,最紧凑的方法不是使用 if 来实现,而是包含一个类名到类对象的字典。

然后您可以键入字典并调用生成的类:

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

当然,可以更改类集以包含您希望的任何其他对象。

关于python - 根据变量名运行不同的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47633133/

相关文章:

python - AttributeError: 'module' 对象没有属性 '__version__'

python - 找不到 "pip"和 "python"命令,但 python3 和 pip3 工作正常

python-3.x - distutils include_dirs 与相对路径?

python - 获取百分比变化,其中轴等于 python pandas 中的列?

python - 将文件传递给类

python - 创建一个新变量,它是 Python 中两个变量的最小值

python - 替换大列表中的所有单词

python - Pandas:从带有字符串标题的列中删除某些值

php - Objective-C 默认参数值

java - Java 中的动态变量名称,因此每个新对象都有单独的名称