我已经阅读了许多关于如何使用类型在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>>
我想定义类,以便它可以为属性采用任何类型的值。
答案 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