wjones127 commented on code in PR #13454:
URL: https://github.com/apache/arrow/pull/13454#discussion_r908769271


##########
docs/source/python/extending_types.rst:
##########
@@ -286,6 +286,36 @@ are available).
 The same ``__arrow_ext_class__`` specialization can be used with custom types 
defined
 by subclassing :class:`ExtensionType`.
 
+Custom scalar conversion
+~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you want scalars of your custom extension type to convert to a custom type 
when
+:meth:`ExtensionScalar.as_py()` is called, you can override the 
:meth:`ExtensionType.scalar_as_py()`
+method. For example, if we wanted the above example 3D point type to return a 
tuple instead
+of a list, we would implement::
+
+    Point3D = namedtuple("Point3D", ["x", "y", "z"])
+
+    class Point3DType(pa.PyExtensionType):
+        def __init__(self):
+            pa.PyExtensionType.__init__(self, pa.list_(pa.float32(), 3))
+
+        def __reduce__(self):
+            return Point3DType, ()
+
+        def scalar_as_py(self, scalar):
+            if scalar is None:
+                return None
+            else:
+                return Point3D(*scalar.as_py())
+
+Arrays built using this extension scalar type now have the expected scalar 
behaviour::

Review Comment:
   ```suggestion
   Arrays built using this extension type now provide scalars that convert to 
our ``Point3D`` class::
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscr...@arrow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to