创建一个动态创建类的函数

时间:2014-06-25 21:36:19

标签: python

我已经阅读了许多关于如何使用类型在python中创建动态类的帖子。

但是我想创建一个函数,它将类名和字段(属性和函数)作为参数。它使用type来创建类。

def create_model(name, fields=None):
    model = type(name, (object,), fields)
    return model

if __name__ == '__main__':
    fields = {
        'first_name': 'abc',
        'last_name': '10',
        '__str__': lambda self: '%s %s' (self.first_name, self.last_name),}
    model = create_model('Person', fields)
    print model.first_name
    print model.__str__
    # prints <unbound method Person.<lambda>>

我想定义类,以便它可以为属性采用任何类型的值。

1 个答案:

答案 0 :(得分:0)

你也创造了一个类。但是__str__之类的特殊方法需要调用,并且要使str()起作用,它需要在实例上使用:

model = create_model('Person', fields)
person_instance = model()
print person_instance

你确实需要修复__str__ lambda,它缺少%

'__str__': lambda self: '%s %s' % (self.first_name, self.last_name)

演示:

>>> fields = {
...     'first_name': 'abc',
...     'last_name': '10',
...     '__str__': lambda self: '%s %s' %(self.first_name, self.last_name),
... }
>>> model = create_model('Person', fields)
>>> person_instance = model()
>>> print person_instance
abc 10