example-code icon indicating copy to clipboard operation
example-code copied to clipboard

_abc_registry attribute is not available in python 3.7.0

Open alpnn opened this issue 7 years ago • 2 comments

When I try running the tombola_runner.py in chapter 11, python reports to me that the '_abc_registry' doesn't exist.

I searched in docs, but found that the attribute is not accesible anymore.

The changelog is """ bpo-31333: _abc module is added. It is a speedup module with C implementations for various functions and methods in abc. Creating an ABC subclass and calling isinstance or issubclass with an ABC subclass are up to 1.5x faster. In addition, this makes Python start-up up to 10% faster.

Note that the new implementation hides internal registry and caches, previously accessible via private attributes _abc_registry, _abc_cache, and _abc_negative_cache. There are three debugging helper methods that can be used instead _dump_registry, _abc_registry_clear, and _abc_caches_clear. """

alpnn avatar Aug 31 '18 01:08 alpnn

You can use abc._get_dump(Tombola) - it returns a 4-tuple of (_abc_registry, _abc_cache, _abc_negative_cache, _abc_negative_cache_version)

The following code should work:

import abc virtual_subclasses = [ref() for ref in abc._get_dump(Tombola)[0] if ref()]

Credit goes to: u/K9000_ from the reddit thread

ShubhamBelwal avatar Oct 30 '18 09:10 ShubhamBelwal

@ShubhamBelwal thanks, it fixed my same problem.

anancds avatar Jun 30 '20 08:06 anancds