diff options
Diffstat (limited to 'Lib/abc.py')
-rw-r--r-- | Lib/abc.py | 42 |
1 files changed, 21 insertions, 21 deletions
@@ -116,7 +116,7 @@ class ABCMeta(type): # A global counter that is incremented each time a class is # registered as a virtual subclass of anything. It forces the # negative cache to be cleared before its next use. - __invalidation_counter = 0 + _abc_invalidation_counter = 0 def __new__(mcls, name, bases, namespace): bases = _fix_bases(bases) @@ -132,10 +132,10 @@ class ABCMeta(type): abstracts.add(name) cls.__abstractmethods__ = abstracts # Set up inheritance registry - cls.__registry = set() - cls.__cache = set() - cls.__negative_cache = set() - cls.__negative_cache_version = ABCMeta.__invalidation_counter + cls._abc_registry = set() + cls._abc_cache = set() + cls._abc_negative_cache = set() + cls._abc_negative_cache_version = ABCMeta._abc_invalidation_counter return cls def register(cls, subclass): @@ -149,15 +149,15 @@ class ABCMeta(type): if issubclass(cls, subclass): # This would create a cycle, which is bad for the algorithm below raise RuntimeError("Refusing to create an inheritance cycle") - cls.__registry.add(subclass) - ABCMeta.__invalidation_counter += 1 # Invalidate negative cache + cls._abc_registry.add(subclass) + ABCMeta._abc_invalidation_counter += 1 # Invalidate negative cache def _dump_registry(cls, file=None): """Debug helper to print the ABC registry.""" print("Class: %s.%s" % (cls.__module__, cls.__name__), file=file) - print("Inv.counter: %s" % ABCMeta.__invalidation_counter, file=file) + print("Inv.counter: %s" % ABCMeta._abc_invalidation_counter, file=file) for name in sorted(cls.__dict__.keys()): - if name.startswith("_ABCMeta__"): + if name.startswith("_abc_"): value = getattr(cls, name) print("%s: %r" % (name, value), file=file) @@ -169,38 +169,38 @@ class ABCMeta(type): def __subclasscheck__(cls, subclass): """Override for issubclass(subclass, cls).""" # Check cache - if subclass in cls.__cache: + if subclass in cls._abc_cache: return True # Check negative cache; may have to invalidate - if cls.__negative_cache_version < ABCMeta.__invalidation_counter: + if cls._abc_negative_cache_version < ABCMeta._abc_invalidation_counter: # Invalidate the negative cache - cls.__negative_cache = set() - cls.__negative_cache_version = ABCMeta.__invalidation_counter - elif subclass in cls.__negative_cache: + cls._abc_negative_cache = set() + cls._abc_negative_cache_version = ABCMeta._abc_invalidation_counter + elif subclass in cls._abc_negative_cache: return False # Check the subclass hook ok = cls.__subclasshook__(subclass) if ok is not NotImplemented: assert isinstance(ok, bool) if ok: - cls.__cache.add(subclass) + cls._abc_cache.add(subclass) else: - cls.__negative_cache.add(subclass) + cls._abc_negative_cache.add(subclass) return ok # Check if it's a direct subclass if cls in subclass.__mro__: - cls.__cache.add(subclass) + cls._abc_cache.add(subclass) return True # Check if it's a subclass of a registered class (recursive) - for rcls in cls.__registry: + for rcls in cls._abc_registry: if issubclass(subclass, rcls): - cls.__registry.add(subclass) + cls._abc_registry.add(subclass) return True # Check if it's a subclass of a subclass (recursive) for scls in cls.__subclasses__(): if issubclass(subclass, scls): - cls.__registry.add(subclass) + cls._abc_registry.add(subclass) return True # No dice; update negative cache - cls.__negative_cache.add(subclass) + cls._abc_negative_cache.add(subclass) return False |