Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 6d3f535

Browse filesBrowse files
authored
Make isinstance and issubclass error for GenericAlias (#6)
1 parent bb9a11f commit 6d3f535
Copy full SHA for 6d3f535

File tree

Expand file treeCollapse file tree

2 files changed

+29
-0
lines changed
Filter options
Expand file treeCollapse file tree

2 files changed

+29
-0
lines changed

‎Lib/test/test_genericalias.py

Copy file name to clipboardExpand all lines: Lib/test/test_genericalias.py
+11Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,17 @@ def test_equality(self):
161161
self.assertNotEqual(list, list[int])
162162
self.assertNotEqual(list[int], list)
163163

164+
def test_isinstance(self):
165+
self.assertTrue(isinstance([], list))
166+
with self.assertRaises(TypeError):
167+
isinstance([], list[str])
168+
169+
def test_issubclass(self):
170+
class L(list): ...
171+
self.assertTrue(issubclass(L, list))
172+
with self.assertRaises(TypeError):
173+
issubclass(L, list[str])
174+
164175

165176
if __name__ == "__main__":
166177
unittest.main()

‎Objects/descrobject.c

Copy file name to clipboardExpand all lines: Objects/descrobject.c
+18Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2061,8 +2061,26 @@ ga_mro_entries(PyObject *self, PyObject *args)
20612061
return PyTuple_Pack(1, alias->origin);
20622062
}
20632063

2064+
static PyObject *
2065+
ga_instancecheck(PyObject *self, PyObject *Py_UNUSED(ignored))
2066+
{
2067+
return PyErr_Format(PyExc_TypeError,
2068+
"TypeError: Subscripted generics cannot be used with class and instance checks",
2069+
self);
2070+
}
2071+
2072+
static PyObject *
2073+
ga_subclasscheck(PyObject *self, PyObject *Py_UNUSED(ignored))
2074+
{
2075+
return PyErr_Format(PyExc_TypeError,
2076+
"TypeError: Subscripted generics cannot be used with class and instance checks",
2077+
self);
2078+
}
2079+
20642080
static PyMethodDef ga_methods[] = {
20652081
{"__mro_entries__", ga_mro_entries, METH_O},
2082+
{"__instancecheck__", ga_instancecheck, METH_O},
2083+
{"__subclasscheck__", ga_subclasscheck, METH_O},
20662084
{0}
20672085
};
20682086

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.