You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从元组列表实例化Year系列子类对象?

问题解答

直接用你写的列表推导式self.years= [year[0](year[1]) for year in years]不能实现需求,原因很简单:year[0]是字符串(比如'Year1'),不是对应的类对象,你没法直接调用字符串来生成类实例,运行时会抛出TypeError: 'str' object is not callable错误。

要实现需求,有两种常用的可行方案:

方案1:建立类名字符串与类对象的映射字典(推荐)

先定义一个字典,把类名字符串和对应的类关联起来,再通过字典获取类来实例化:

class Lesson:
    def __init__(self, teacher, years):
        # 建立类名到类对象的映射
        year_class_map = {
            'Year1': Year1,
            'Year2': Year2,
            'Year3': Year3
        }
        # 通过列表推导式生成实例列表
        self.years = [year_class_map[year_name](age) for year_name, age in years]

这种方式清晰可控,不会依赖全局命名空间,也能避免类名拼写错误导致的意外问题。

方案2:利用全局命名空间获取类(不推荐)

如果你的Year系列类都在全局命名空间中,可以通过globals()函数获取类对象:

class Lesson:
    def __init__(self, teacher, years):
        self.years = [globals()[year_name](age) for year_name, age in years]

但这种方法风险较高——如果类名拼写错误、类被移到其他模块或者不在全局空间里,就会抛出KeyError,维护起来很麻烦,所以不建议在生产代码中使用。

内容的提问来源于stack exchange,提问作者Nemo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 16:47:05