Python:合成类

Python:合成类,python,class,Python,Class,我可以创建一个从cls继承的合成类cls1 >>> class cls(object): ... def func(self,arg): ... print 'func',arg >>> def func1(self): ... print "func 1 of cls1" >>> def func2(self): ... print "func2 of cls1" >>> d=dic

我可以创建一个从
cls
继承的合成类
cls1

>>> class cls(object):
...     def func(self,arg):
...         print 'func',arg
>>> def func1(self):
...     print "func 1 of cls1"
>>> def func2(self):
...     print "func2 of cls1"
>>> d=dict(func1=func1,func2=func2)
>>> cls1=type('cls1',(cls,),d)
一切正常:

>>> obj=cls1()
>>> obj.func(7)
func 7
我还可以用
FOO
替换
cls1

>>> cls1=type('FOO',(cls,),d)
这给了我:

'cls1': <class '__main__.FOO'>,
“cls1”:,

这(更改
\uuuu name\uuuuu
变量)是否会改变
cls1的行为以及(一切仍然正常)的方式?

您只是更改了类的名称,因此只有在您以某种方式依赖名称时才有意义:

>>> type(obj)
__main__.FOO
>>> isintance(obj, cls1)
True
这很好,但是酸洗呢(我认为这取决于名称)

例如,在名称更改之前,可以毫无问题地pickle
obj
。你不能事后再这样做

PicklingError: Can't pickle <class '__main__.FOO'>: it's not found as __main__.FOO
PicklingError:无法pickle:找不到它作为_umain__uu.FOO

您刚刚创建了一个具有不同名称的功能等效类型