如何不使用废弃方法执行 `new.classobj(name, (base_class,), my_dict)`?

1 投票
1 回答
691 浏览
提问于 2025-04-18 05:16

我在saucelabs的 example.py 文件中发现了一个使用 import new 模块的代码片段。

import new
# .. snip ..
def on_platforms(platforms):
    def decorator(base_class):
        module = sys.modules[base_class.__module__].__dict__
        for i, platform in enumerate(platforms):
            d = dict(base_class.__dict__)
            d['desired_capabilities'] = platform
            name = "%s_%s" % (base_class.__name__, i + 1)
            module[name] = new.classobj(name, (base_class,), d)
    return decorator

但是查看 help(new) 后发现,这个模块已经不推荐使用了。那么,有什么其他的方法可以实现 new.classobj(name, (base_class,), d) 呢?

1 个回答

5

type这个关键词其实是一个类。你可以用下面的方式来实现上述功能:

module[name] = type(name, (base_class,), d)

这样做会返回一个名为name的类,它的参数是基类base_class的元组,同时用dict中的d来初始化成员对象。

撰写回答