gpt4 book ai didi

Python:合成类

转载 作者:行者123 更新时间:2023-11-28 17:49:44 28 4
gpt4 key购买 nike

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

这(更改 __name__ 变量)是否会改变 cls1 的行为以及如何(一切仍然正常)?

最佳答案

你只是在改变你的类(class)的名字,所以只有当你以某种方式依赖这个名字时才有意义:

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

这很好用,但是 pickling 呢(我认为依赖于名称)?

例如,在名称更改之前,您可以 pickle obj 没有任何问题。之后你不能。

PicklingError: Can't pickle <class '__main__.FOO'>: it's not found as __main__.FOO

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com