指向类而不创建对象以便于访问

2024-09-17 19:51:13 发布

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

我有一个父类,这是一系列工具的初步要求

最小示例:

class Tools():
    def __init__(self, name, age):
        self.name = name
        self.age = age

class Func_a(Tools):
    def __init__(self, name, age, sex):
        super().__init__(name, age)
        self.sex = sex

    def _func_a(self):
        print(self.name)

class Func_b(Tools):
    def __init__(self, name, age, sex):
        super().__init__(name, age)
        self.sex = sex

    def _func_b(self):
        print(self.name)

然后,根据一些先决条件,我使用一个映射调用一个或另一个函数

CLASS_MAP = {
    "func_a":Func_a("name1", 25, "m"),
    "func_b":Func_b("name2", 100, "F")
}

然后看看发生了什么:

first_class = CLASS_MAP["func_a"]
second_class = CLASS_MAP["func_b"]


print(first_class.name)
print(second_class.name)

我的问题是,我有没有办法在不实际调用类和实例化对象的情况下指向dict中的特定类

根据某些约束条件,我必须调用其中一个类(例如Func_a、Func_b。。。Func_f)[共6个子类]

我使用了一堆if-else语句来实现,但是这非常混乱,而且两个语句之间有很多代码是冗余的

如果我的映射可以指向正确的类,但不能实际调用它,那将是理想的。因为当前即使我删除了second_class = CLASS_MAP["func_b"],仍然会从映射中调用func_b,如果我错了,请纠正我


Tags: nameselfmapageinitdeftoolsclass
1条回答
网友
1楼 · 发布于 2024-09-17 19:51:13

一种可能的方式:

CLASS_MAP = {
    "func_a":lambda: Func_a("name1", 25, "m"),
    "func_b":lambda: Func_b("name2", 100, "F")
}

first_class = CLASS_MAP["func_a"]()

其中a = lambda: x基本上是

def temp():
    return x

a = temp

另见关于lambda的文件

因此,映射的值是函数对象,在应用调用运算符()之前,这些对象被存储但不会执行

相关问题 更多 >