Skip to content

Unable to serialize function that instantiates a subclass #99

@acommendador

Description

@acommendador

Using 0.3.1 the following code

import cloudpickle

class Base:
    def __init__(self, field1):
        self.field1 = field1

class Child(Base):
    def __init__(self, field2, field1):
        super().__init__(field1)
        self.field2 = field2

def test_function():
    _ = Child('field-2-value', 'field-1-value')

_ = cloudpickle.dumps(test_function)

results in stacktrace:

Traceback (most recent call last):
  File "<removed path>/experiment_cloudpickle.py", line 18, in <module>
    _ = cloudpickle.dumps(test_function)
  File "<removed path>\Continuum\Miniconda3\lib\site-packages\cloudpickle\cloudpickle.py", line 829, in dumps
    cp.dump(obj)
  File "<removed path>\Continuum\Miniconda3\lib\site-packages\cloudpickle\cloudpickle.py", line 233, in dump
    return Pickler.dump(self, obj)
  File <removed path>\Continuum\Miniconda3\lib\pickle.py", line 408, in dump
    self.save(obj)
  File "<removed path>\Continuum\Miniconda3\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "<removed path>\Continuum\Miniconda3\lib\site-packages\cloudpickle\cloudpickle.py", line 354, in save_function
    self.save_function_tuple(obj)
  File "<removed path>\Continuum\Miniconda3\lib\site-packages\cloudpickle\cloudpickle.py", line 436, in save_function_tuple
    save(f_globals)
  File "<removed path>\Continuum\Miniconda3\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "<removed path>\Continuum\Miniconda3\lib\pickle.py", line 814, in save_dict
    self._batch_setitems(obj.items())
  File "<removed path>\Continuum\Miniconda3\lib\pickle.py", line 845, in _batch_setitems
    save(v)
  File "<removed path>\Continuum\Miniconda3\lib\pickle.py", line 475, in save
    f(self, obj) # Call unbound method with explicit self
  File "<removed path>\Continuum\Miniconda3\lib\site-packages\cloudpickle\cloudpickle.py", line 548, in save_global
    self.save_reduce(typ, (obj.__name__, obj.__bases__, d), obj=obj)
  File "<removed path>\Continuum\Miniconda3\lib\site-packages\cloudpickle\cloudpickle.py", line 713, in save_reduce
    self.memoize(obj)
  File "<removed path>\Continuum\Miniconda3\lib\pickle.py", line 429, in memoize
    assert id(obj) not in self.memo
AssertionError

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions