Home | History | Annotate | Download | only in Lib

Lines Matching full:subclass

126     # registered as a virtual subclass of anything.  It forces the
151 def register(cls, subclass):
152 """Register a virtual subclass of an ABC.
154 Returns the subclass, to allow usage as a class decorator.
156 if not isinstance(subclass, type):
158 if issubclass(subclass, cls):
159 return subclass # Already a subclass
160 # Subtle: test for cycles *after* testing for "already a subclass";
162 if issubclass(cls, subclass):
165 cls._abc_registry.add(subclass)
167 return subclass
181 subclass = instance.__class__
182 if subclass in cls._abc_cache:
185 if subtype is subclass:
188 subclass in cls._abc_negative_cache):
190 # Fall back to the subclass check.
191 return cls.__subclasscheck__(subclass)
192 return any(cls.__subclasscheck__(c) for c in {subclass, subtype})
194 def __subclasscheck__(cls, subclass):
195 """Override for issubclass(subclass, cls)."""
197 if subclass in cls._abc_cache:
204 elif subclass in cls._abc_negative_cache:
206 # Check the subclass hook
207 ok = cls.__subclasshook__(subclass)
211 cls._abc_cache.add(subclass)
213 cls._abc_negative_cache.add(subclass)
215 # Check if it's a direct subclass
216 if cls in getattr(subclass, '__mro__', ()):
217 cls._abc_cache.add(subclass)
219 # Check if it's a subclass of a registered class (recursive)
221 if issubclass(subclass, rcls):
222 cls._abc_cache.add(subclass)
224 # Check if it's a subclass of a subclass (recursive)
226 if issubclass(subclass, scls):
227 cls._abc_cache.add(subclass)
230 cls._abc_negative_cache.add(subclass)