【发布时间】:2020-04-20 03:13:14
【问题描述】:
我正在创建一个函数,它在其中创建一个类并返回它......
def create_object(**objects):
# creates class, NewClass
class NewClass:
pass
for key in objects.keys():
# creating objects in NewClass
exec("NewClass.%s = %s" % (key, objects[key]))
return NewClass
当我们调用这个函数时,
new_object = create_object(first_name='Mayank', last_name='Tyagi')
new_object.first_name
这工作正常并提供输出
>>> 'Mayank'
但我想创建一个函数,该函数将创建一个具有变量名的类。 例如
def object(class_name, **objects):
# create a class where the value of class_name is the name of class
exec("class %s:\n\tpass" % (class_name))
for key in objects.keys():
# creating new objects in this class
exec("NewClass.%s = %s" % (key, objects[key]))
调用函数后,
object('ClassName', first_name='Mayank', last_name='Tyagi')
ClassName.first_name
它应该给出输出,
>>>'Mayank'
这个怎么做?
-带着希望寻求帮助:)
【问题讨论】:
-
第4个代码块最后一行是:exec("%s.%s = %s" % (class_name,key,objects[key]))
-
第二个
exec应该是exec("%s.%s = %s" % (class_name, key, objects[key]))。虽然,我并不真正鼓励这种类型的设计。 -
不要使用
exec,使用type:cls = type(name, (object,), objects)。
标签: python python-3.x oop