@mateusz made some changes around Model sub-classing for Bokeh 3.0 hopefully he can chime in here with some guidance.
Offhand though, I might suggest switching to a compositional design where you keep track of Bokeh objects internally, rather than trying to subclass them. Unfortunately the cross-runtime nature of Bokeh makes subclassing things, without also providing a corresponding JavaScript implementation, awkward.
examples/plotting/data_models.py is a good starting point for this. One thing it doesn’t show, is that data models can extend existing models and define new properties, so you can write something like this:
class MyPlot(Plot, DataModel):
my_proproperty = Int()
This works for figure as well.
Note that __subtype__ was removed. __view_model__ and __view_module__ are still in use, but should be used sparingly. Data models don’t require those properties in typical usage.