在函数中动态创建 Python 子类

Dynamically Create a Python Subclass in a Function

我想写一个创建动态子类的函数。 例如:

def get_class(num):
    ...
    ...
    return _class

这个函数接受一个整数num然后构造这样一个类

class Test(BaseClass):
    attr_1 = 1
    attr_2 = 1
    ...
    attr_num = 1

和return它。

我想知道这是否可以在不编写元类的情况下实现。

您可以使用type函数动态创建class。 documentation for type 几乎准确地描述了您要完成的任务。像这样:

class BaseClass(object):
    pass

def get_class(num):
    attrs = [('attr_%d' % i, 1) for i in range(num)]
    return type('Test', (BaseClass,), dict(attrs))

正如另一个答案中提到的,您可以使用 type,在这种情况下您可以动态构造属性:

def foo(num, **kwargs):
    kwargs.update({'num': num})
    return type('Foo', (BaseClass,), kwargs)

或者如果您不需要动态键,您可以简单地手动实例化一个 class:

def foo(num):
    class Foo(BaseClass):
        num = num
    return Foo