我可以创建一个继承自cls1
的合成类cls
。
>>> 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
我也可以用
cls1
替换FOO
:>>> cls1=type('FOO',(cls,),d)
这给了我:
'cls1': <class '__main__.FOO'>,
这(改变
__name__
变量)是否会改变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
关于python - Python:综合类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12390583/