在函数中动态创建Python子类

时间:2015-01-05 04:37:33

标签: python

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

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

此函数接受整数num,然后构造这样的类

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

并将其归还。

我想知道在没有编写元类的情况下是否可行。

2 个答案:

答案 0 :(得分:2)

如其他答案中所述,您可以使用type,在这种情况下,您可以动态构建属性:

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

或者如果你不需要动态密钥,你可以简单地手动实例化一个类:

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

答案 1 :(得分:1)

您可以使用type函数动态创建类。 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))