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

2024-09-27 21:27:38 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我们有几个不同的类: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个文件在这个场景中使用。你知道吗

文件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中运行同一个类。你知道吗


Tags: and文件runnamegetcallvariableclass
2条回答

你可以使用eval

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

但我不确定eval是否是推荐的方法。你知道吗

是的,完全有可能。不过,最简洁的方法不是用if来实现,而是将类名字典添加到类对象中。你知道吗

然后可以为字典设置键并调用生成的类:

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

当然,可以对类集进行修改,以包含您希望的任何其他对象。你知道吗

相关问题 更多 >

    热门问题