Cannot set object value of bpy.types.Operator in 5.0.0

Hello,

I am upgrading from Blender 4.3.2. My plugin has a base class which several Operators extend. In the base class’s __init__, I create a new class and assign it to an object variable.

In 4.3.2, this works fine. In 5.0.0, I get the error:

  File "/home/name/.config/blender/5.0/scripts/addons/rct-graphics-helper/operators/render_operator.py", line 41, in __init__
    self.task_builder = TaskBuilder()
    ^^^^^^^^^^^^^^^^^
  File "/home/name/Documents/blender/versions/blender-5.0.0-beta+v50.aceda64e198a-linux.x86_64-release/5.0/scripts/modules/_bpy_types.py", line 1027, in __setattr__
    properties = _StructRNA.path_resolve(self, "properties")
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ReferenceError: StructRNA of type RenderTiles has been removed
00:06.979  bpy.rna          | ERROR Python script error in RENDER_OT_rct_static.execute
00:06.979  operator         | ERROR Python: Traceback (most recent call last):
                            |   File "/home/name/.config/blender/5.0/scripts/addons/rct-graphics-helper/operators/render_operator.py", line 41, in __init__
                            |     self.task_builder = TaskBuilder()
                            |     ^^^^^^^^^^^^^^^^^
                            |   File "/home/name/Documents/blender/versions/blender-5.0.0-beta+v50.aceda64e198a-linux.x86_64-release/5.0/scripts/modules/_bpy_types.py", line 1027, in __setattr__
                            |     properties = _StructRNA.path_resolve(self, "properties")
                            |                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
                            | ReferenceError: StructRNA of type RenderTiles has been removed

RenderTiles defined in operators/render_tile_operator.py extends bpy.types.Operator and RCTRender (which does not extend any class) defined in operators/render_operator.py. TaskBuilder does not extend any class.

Snippets:

operators.render_operator.py

class RCTRender:
    def __init__(self, context=None):

        self.task_builder = TaskBuilder() # line which errors

    @classmethod
    def poll(cls, context):
        return True

    def execute(self, context):

        def finish():
            pass
        return {'FINISHED'}
operators/render_tile_operator.py

class RenderTiles(RCTRender, bpy.types.Operator):
    bl_idname = "render.rct_static"
    bl_label = "Render RCT Static"

I looked in https://developer.blender.org/docs/release_notes/5.0/python_api/ to see if it had any information I could use to debug this, but it wasn’t clear what I was supposed to do.

Can you help?

remove __init__ and move initialization into execute() or invoke():

class RCTRender:
    @classmethod
    def poll(cls, context):
        return True

    def execute(self, context):
        self.task_builder = TaskBuilder()  # safe here
        ...
        return {'FINISHED'}