相关疑难解决方法(0)

我怎样才能在python中挑选一个嵌套类?

我有一个嵌套类:

class WidgetType(object):

    class FloatType(object):
        pass

    class TextType(object):
        pass

..和一个引用嵌套类类型(不是它的实例)的对象,就像这样

class ObjectToPickle(object):
     def __init__(self):
         self.type = WidgetType.TextType

尝试序列化ObjectToPickle类的实例会导致:

PicklingError:无法挑选<class'setmanager.app.site.widget_data_types.TextType'>

有没有办法在python中腌制嵌套类?

python nested class pickle

38
推荐指数
5
解决办法
2万
查看次数

Pickle一个动态参数化的子类

我有一个通常存储腌制类类型的系统.

我希望能够以相同的方式保存动态参数化的类,但我不能,因为我试图挑选一个非全局发现的类(未在简单代码中定义)得到PicklingError.

我的问题可以建模为以下示例代码:

class Base(object):
 def m(self):
  return self.__class__.PARAM

def make_parameterized(param_value):
 class AutoSubClass(Base):
  PARAM = param_value
 return AutoSubClass

cls = make_parameterized(input("param value?"))
Run Code Online (Sandbox Code Playgroud)

当我尝试挑选该类时,我收到以下错误:

# pickle.PicklingError: Can't pickle <class '__main__.AutoSubClass'>: it's not found as __main__.AutoSubClass
import pickle
print pickle.dumps(cls)
Run Code Online (Sandbox Code Playgroud)

我正在寻找一些方法来声明Base作为一个ParameterizableBaseClass应该定义所需的params(PARAM在上面的例子中).cls然后,通过保存"ParameterizableBaseClass"类型和不同的param值(param_value上面的动态),可以选择动态参数化子类(上面).

我相信在很多情况下,这可以完全避免......我可以在我的代码中避免这种情况,如果我真的(真的)必须这样做的话.我正在玩__metaclass__,copyreg甚至__builtin__.issubclass在某些时候(不要问),但是无法破解这个.

如果我不问的话,我觉得我不会忠于蟒蛇精神:如何以相对干净的方式实现这一目标?

python factory class dynamic pickle

14
推荐指数
2
解决办法
4071
查看次数

标签 统计

class ×2

pickle ×2

python ×2

dynamic ×1

factory ×1

nested ×1