Per the API docs, channels returned by Manager OnAttach handlers are read-only objects, and the developer should create new instances of the correct type.My question is, is there a way to dynamically create the correct type?

Cannot use ch.__class__ as it is always an instance of class Phidget.Is it possible to use ch.getChannelClassName() to somehow create the proper class instance?

The code you have shown is the intended way to go about creating new objects at this time.

This is a hold-over from how other (statically typed) languages have to approach creating new Phidgets, which need to specify a type before the code is run. It's admittedly not optimized for how Python could handle it, but that's what exists for the time being.