0

与这个问题类似,我想将属性从字典传递给类的实例,但使用创建类type,如下所示:

attrs = { 'name': 'Oscar', 'lastName': 'Reyes', 'age':32 }

e = type('Employee', (object,),attrs)()

但是当我这样做时,属性属于类,而不仅仅是实例。如果我使用以下方法创建两个实例:

e = type('Employee', (object,), attrs)()
f = type('Employee', (object,), attrs)()

它们实际上将是两个不同的类。

我想创建一个接受**kwargs*argsin的类__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 )
4

1 回答 1

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
于 2013-06-04T12:40:57.883 回答