Is it Possible to Create new 'bpy.types' subclasses (e.g. bpy.types.newTypeForExample)

For creating a Simple Node, I have been doing

class aNewNode(bpy.types.Node):
    bl_idname = "NewNode1"

In this way, That NewNode1 can be Created inside any of the NodeTrees and NodeEditors. But If I had passed bpy.types.ShaderNode, That Custom Node would raise an error if We Tried to Create it outside ShaderNodeTrees

Now what I want to do is to Create a NewNodeTreeType just like the ShaderNode, CompositorNode Types and also restrict the NewNodes that I make, only for NewNodeTreeType. For doing so what I’ve come up with so far is [USING POLL]:-

class aNewNodeTree(bpy.types.NodeTree):
    bl_idname = 'NewNodeTreeType'
    bl_label = 'Something_Goofy'

class aNewNode(bpy.types.Node):
    bl_idname = "NewNode1"
    def poll(self, context):
        return context.bl_idname == 'NewNodeTreeType'

But I was think If I could make my “NewNodeTreeType” a new bpy type like the bpy.types.ShaderNode, Then I wouldn’t have to add the poll check in every node that I Create