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
这很好,但是酸洗呢(我认为这取决于名称)
例如,在名称更改之前,可以毫无问题地pickleobj
。你不能事后再这样做
PicklingError: Can't pickle <class '__main__.FOO'>: it's not found as __main__.FOO
PicklingError:无法pickle:找不到它作为_umain__uu.FOO
您刚刚创建了一个具有不同名称的功能等效类型