import FreeCAD
doc = FreeCAD.ActiveDocument
obj = doc.getObject("TargetObject")
shape = getattr(obj, "Shape", None)
if shape is None or shape.isNull():
raise RuntimeError("target has no usable shape")
print({
"shape_type": shape.ShapeType,
"valid": shape.isValid(),
"volume": getattr(shape, "Volume", None),
"area": getattr(shape, "Area", None),
"solids": len(getattr(shape, "Solids", [])),
"faces": len(getattr(shape, "Faces", [])),
"edges": len(getattr(shape, "Edges", [])),
"vertices": len(getattr(shape, "Vertexes", [])),
"methods": [name for name in dir(shape) if not name.startswith("_")],
})