Skip to main content
 首页 » 编程设计

Python:如何使用存储在变量中的值来决定启动哪个类实例

2025年05月04日9jillzhang

我正在构建一个 Django 站点。我需要为许多不同的产品类别建模,例如电视、笔记本电脑、女装、男鞋等。

由于不同的产品类别具有不同的产品属性,因此每个类别都有自己独立的型号:TV、Laptop、WomensApparel、MensShoes, etc.

我为每个模型创建了一个 ModelForm。因此我有 TVForm、LaptopForm、WomensApparelForm、MensShoesForm 等

用户可以通过多级下拉框选择产品类别来输入产品详情。一旦用户选择了产品类别,我需要显示相应的产品表单。

最明显的方法是使用一个巨大的 if-elif 结构:

# category is the product category selected by the user 
 
if category == "TV": 
    form = TVForm() 
elif category == "Laptop": 
    form = LaptopForm() 
elif category == "WomensApparel": 
    form = WomensApparelForm() 
... 

不幸的是,可能有数百个类别。所以上面的方法将是容易出错和繁琐的。

有什么方法可以使用变量 category 的值直接选择和初始化适当的 ModelForm 而无需求助于巨大的 if-elif声明?

类似于:

# This doesn't work 
 
model_form_name = category + "Form" 
form = model_form_name() 

有什么办法吗?

请您参考如下方法:

如果您所有的*Form 类都在一个模块中(我们称它为forms),您可以这样做:

import forms 
 
form = getattr(forms, category + "Form")() 

(显然,添加任何必要的验证,例如捕获 AttributeError。安全方面,如果您使用的是命名模块而不是全局命名空间,那么有人会更难注入(inject)一个新的 *Form 类。)