我想编写一个创建动态子类的函数。 例如:
def get_class(num):
...
...
return _class
此函数接受整数num
,然后构造这样的类
class Test(BaseClass):
attr_1 = 1
attr_2 = 1
...
attr_num = 1
并将其归还。
我想知道在没有编写元类的情况下是否可行。
答案 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))