同样to this question我想将字典中的属性传递给类的实例,但是使用type
创建类,如下所示:
attrs = { 'name': 'Oscar', 'lastName': 'Reyes', 'age':32 }
e = type('Employee', (object,),attrs)()
但是当我这样做时,属性属于类,不仅仅属于实例。如果我使用:
创建两个实例e = type('Employee', (object,), attrs)()
f = type('Employee', (object,), attrs)()
他们实际上是两个不同的类。
我想在**kwargs
中创建一个接受*args
和__init__()
的课程,例如:
class Employee(object):
def __init__(self, *args, **kwargs):
self.args = args
for k,v in kwargs.items():
setattr(self, k, v)
使用type()
。那样:
MyClass = type('Employee', (object,), {})
允许:
e = MyClass( **kwargs )
答案 0 :(得分:3)
没问题。您只需编写该函数并将其包含在您传递到密钥type
'__init__'
的字典中
def func(self,*args,**kwargs):
self.args = args
for k,v in kwargs.items():
setattr(self,k,v)
MyClass = type('Employee',(object,),{'__init__':func})
e = MyClass(name='john')
print (e.name) #'john'
当你完成创建课程时,你甚至可以“删除”func
,如果它让你对保持命名空间清晰感觉更好:
MyClass = type('Employee',(object,),{'__init__':func})
#clean up, clean up, everybody everywhere, clean up clean up, everybody do your share ...
del func