What's the public API alternative to _PyObject_GC_IS_TRACKED()?

Marco Sulla Marco.Sulla.Python at gmail.com
Wed Dec 29 05:59:21 EST 2021


On Wed, 29 Dec 2021 at 09:12, Dieter Maurer <dieter at handshake.de> wrote:
> `MutableMapping` is a so called abstract base class (--> `abc`).
>
> It uses the `__subclass_check__` (and `__instance_check__`) of
> `abc.ABCMeta` to ensure `issubclass(dict, MutableMapping)`.
> Those can be customized by overriding `MutableMapping.__subclasshook__`
> to ensure that your `frozendict` class (and their subclasses)
> are not considered subclasses of `MutableMapping`.

It does not work:

$ python
Python 3.10.0 (heads/3.10-dirty:f6e8b80d20, Nov 18 2021, 19:16:18)
[GCC 10.1.1 20200718] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import frozendict
>>> frozendict.c_ext
False
>>> from frozendict import frozendict as fd
>>> from collections.abc import MutableMapping as Mm
>>> issubclass(fd, Mm)
True
>>> @classmethod
... def _my_subclasshook(klass, subclass):
...     if subclass == fd:
...             return False
...     return NotImplemented
...
>>> @classmethod
... def _my_subclasshook(klass, subclass):
...     print(subclass)
...     if subclass == fd:
...             return False
...     return NotImplemented
...
>>> Mm.__subclasshook__ = _my_subclasshook
>>> issubclass(fd, Mm)
True
>>> issubclass(tuple, Mm)
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
<class 'tuple'>
False
>>>


More information about the Python-list mailing list