我可以创建一个继承自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

那很好,但是腌制呢(我想是靠名字的)?
例如,在名称更改之前,您可以毫无问题地pickleobj。你以后不能。
PicklingError: Can't pickle <class '__main__.FOO'>: it's not found as __main__.FOO

关于python - Python:综合类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12390583/

10-10 06:21