user: What is ShapeKey(bpy_struct) and how is it used in Blender Python scripting?

assistant: # ShapeKey(bpy_struct)

base class — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct")

*class* bpy.types.ShapeKey(*bpy_struct*)
:   Shape key in a shape keys data-block

    data
    :   Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`UnknownType`](bpy.types.UnknownType.html#bpy.types.UnknownType "bpy.types.UnknownType"), (readonly)

    frame
    :   Frame for absolute keys

        Type:
        :   float in [-inf, inf], default 0.0, (readonly)

    interpolation
    :   Interpolation type for absolute shape keys

        Type:
        :   enum in [`'KEY_LINEAR'`, `'KEY_CARDINAL'`, `'KEY_CATMULL_ROM'`, `'KEY_BSPLINE'`], default `'KEY_LINEAR'`

    lock_shape
    :   Protect the shape key from accidental sculpting and editing

        Type:
        :   boolean, default False

    mute
    :   Toggle this shape key

        Type:
        :   boolean, default False

    name
    :   Name of Shape Key

        Type:
        :   string, default “”, (never None)

    points
    :   Optimized access to shape keys point data, when using foreach_get/foreach_set accessors. Warning: Does not support legacy Curve shape keys.

        Type:
        :   [`bpy_prop_collection`](bpy.types.bpy_prop_collection.html#bpy.types.bpy_prop_collection "bpy.types.bpy_prop_collection") of [`ShapeKeyPoint`](bpy.types.ShapeKeyPoint.html#bpy.types.ShapeKeyPoint "bpy.types.ShapeKeyPoint"), (readonly)

    relative_key
    :   Shape used as a relative key

        Type:
        :   [`ShapeKey`](#bpy.types.ShapeKey "bpy.types.ShapeKey"), (never None)

    slider_max
    :   Maximum for slider

        Type:
        :   float in [-10, 10], default 1.0

    slider_min
    :   Minimum for slider

        Type:
        :   float in [-10, 10], default 0.0

    value
    :   Value of shape key at the current frame

        Type:
        :   float in [0, 1], default 1.0

    vertex_group
    :   Vertex weight group, to blend with basis shape

        Type:
        :   string, default “”, (never None)

    normals_vertex_get()
    :   Compute local space vertices’ normals for this shape key

        Returns:
        :   normals

        Return type:
        :   float in [-1, 1]

    normals_polygon_get()
    :   Compute local space faces’ normals for this shape key

        Returns:
        :   normals

        Return type:
        :   float in [-1, 1]

    normals_split_get()
    :   Compute local space face corners’ normals for this shape key

        Returns:
        :   normals

        Return type:
        :   float in [-1, 1]

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type