3

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どのように変更しますか (すべてが正常に動作しますか)?

4

1 に答える 1

2

クラスの名前を変更しているだけなので、何らかの形で名前に依存している場合にのみ問題になるはずです。

>>> type(obj)
__main__.FOO
>>> isintance(obj, cls1)
True

それはうまくいきますが、ピクルス(名前に依存していると思います)はどうですか?

例えば、名前が変わる前ならobj問題なくピクルできます。後はできません。

PicklingError: Can't pickle <class '__main__.FOO'>: it's not found as __main__.FOO
于 2012-09-12T14:50:32.357 に答える