Pandas version checks

  • [X] I have checked that this issue has not already been reported.

  • [X] I have confirmed this bug exists on the latest version of pandas.

  • [ ] I have confirmed this bug exists on the main branch of pandas.

Reproducible Example

import pandas as pd
import pyarrow as pa


class AwesomeType(pa.ExtensionType):
    def __init__(self):
        super().__init__(pa.binary(), "awesome")

    def __reduce__(self):
        return AwesomeType, ()

    @property
    def name(self):
        return "awesome"

    def __arrow_ext_serialize__(self):
        return b''


class AwesomeDtype(pd.api.extensions.ExtensionDtype):
    na_value = None

    def __init__(self):
        self._arrow_type = AwesomeType()

    @property
    def name(self):
        return "awesome"

    @property
    def type(self):
        return self._arrow_type

    @classmethod
    def construct_from_string(cls, string):
        if string == "awesome":
            return cls()
        return None


class AwesomeArray(pd.api.extensions.ExtensionArray):
    _dtype = AwesomeDtype()

    def __init__(self, data):
        if not isinstance(data, pa.Array):
            data = pa.array(data, type=pa.binary())
        self.data = data

    @classmethod
    def _from_sequence(cls, scalars, dtype=None, copy=False):
        return cls(pa.array(scalars, type=pa.binary()))

    # def __getitem__(self, item):
    #    return self.data[item.as_py()]

    def __len__(self):
        return len(self.data)

    def __eq__(self, other):
        if isinstance(other, AwesomeArray):
            return self.data.equals(other.data)
        return False

    def isna(self):
        return pa.compute.is_null(self.data)

    def copy(self):
        return AwesomeArray(self.data)

    @property
    def dtype(self):
        return self._dtype


if __name__ == "__main__":
    from pandas.api.extensions import (
        register_extension_dtype,
        register_dataframe_accessor,
        register_series_accessor,
    )

    register_extension_dtype(AwesomeDtype)

    import numpy as np

    data = ["POINT(1 2)", "POINT(3 4)", "POINT(5 6)"]
    awesome_array = AwesomeArray(data)
    s = pd.Series(awesome_array)
    print(s)

Issue Description

The code fails with this:

File "c:\code\awesome-array-example.py", line 91, in <module>
  print(s)
File "c:\envs\my-dev\Lib\site-packages\pandas\core\series.py", line 1465, in __repr__
  self.to_string(
File "c:\envs\my-dev\Lib\site-packages\pandas\core\series.py", line 1534, in to_string
  result = formatter.to_string()
File "c:\envs\my-dev\Lib\site-packages\pandas\io\formats\format.py", line 391, in to_string
  fmt_values = self._get_formatted_values()
File "c:\envs\my-dev\Lib\site-packages\pandas\io\formats\format.py", line 375, in _get_formatted_values
  return format_array(
File "c:\envs\my-dev\Lib\site-packages\pandas\io\formats\format.py", line 1203, in format_array
  if is_datetime64_dtype(values.dtype):
File "c:\envs\my-dev\Lib\site-packages\pandas\core\dtypes\common.py", line 344, in is_datetime64_dtype
  return _is_dtype_type(arr_or_dtype, classes(np.datetime64))
File "c:\envs\my-dev\Lib\site-packages\pandas\core\dtypes\common.py", line 1619, in _is_dtype_type
  return condition(tipo)
File "c:\envs\my-dev\Lib\site-packages\pandas\core\dtypes\common.py", line 146, in <lambda>
  return lambda tipo: issubclass(tipo, klasses)

builtins.TypeError: issubclass() arg 1 must be a class

when I try to display the series.

Expected Behavior

0    POINT(1 2)
1    POINT(3 4)
2    POINT(5 6)
dtype: String

Installed Versions

1.5.3

Comment From: achapkowski

I needed to add the def type() to the ExtensionDtype. I figured it out by looking at the https://github.com/pandas-dev/pandas/blob/fb754d71db2897b40dd603e880a15e028f64f750/pandas/core/dtypes/base.py#L41 Base Class.