[Python-checkins] r55274 - sandbox/trunk/abc/def.py
guido.van.rossum
python-checkins at python.org
Fri May 11 20:16:09 CEST 2007
Author: guido.van.rossum
Date: Fri May 11 20:16:01 2007
New Revision: 55274
Added:
sandbox/trunk/abc/def.py (contents, props changed)
Log:
Example from revised PEP 3119 (not yet submitted).
Added: sandbox/trunk/abc/def.py
==============================================================================
--- (empty file)
+++ sandbox/trunk/abc/def.py Fri May 11 20:16:01 2007
@@ -0,0 +1,26 @@
+class ABC(type):
+
+ def __instancecheck__(cls, inst):
+ """Implement isinstance(inst, cls)."""
+ return any(cls.__subclasscheck__(c)
+ for c in {type(inst), inst.__class__})
+
+ def __subclasscheck__(cls, sub):
+ """Implement issubclass(sub, cls)."""
+ candidates = cls.__dict__.get("__subclass__", set()) | {cls}
+ return any(c in candidates for c in sub.mro())
+
+class Sequence(metaclass=ABC):
+ __subclass__ = {list, tuple}
+
+assert issubclass(list, Sequence)
+assert issubclass(tuple, Sequence)
+
+class AppendableSequence(Sequence, metaclass=ABC):
+ __subclass__ = {list}
+
+assert issubclass(list, AppendableSequence)
+assert isinstance([], AppendableSequence)
+
+assert not issubclass(tuple, AppendableSequence)
+assert not isinstance((), AppendableSequence)
More information about the Python-checkins
mailing list