From: Benjamin Peterson Date: Sat, 17 Jan 2009 22:27:54 +0000 (+0000) Subject: fix inspect.isclass() on instances with a custom __getattr__ #1225107 X-Git-Tag: v2.7a1~2272 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5e5fbb612d8109078c2777e1759277f9144616d0;p=python fix inspect.isclass() on instances with a custom __getattr__ #1225107 --- diff --git a/Lib/inspect.py b/Lib/inspect.py index a89d62e6a2..1453f3b7cf 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -62,7 +62,7 @@ def isclass(object): Class objects provide these attributes: __doc__ documentation string __module__ name of module in which this class was defined""" - return isinstance(object, types.ClassType) or hasattr(object, '__bases__') + return isinstance(object, (type, types.ClassType)) def ismethod(object): """Return true if the object is an instance method. diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index b653f40200..7312cac008 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -65,7 +65,6 @@ class TestPredicates(IsTestBase): def test_excluding_predicates(self): self.istest(inspect.isbuiltin, 'sys.exit') self.istest(inspect.isbuiltin, '[].append') - self.istest(inspect.isclass, 'mod.StupidGit') self.istest(inspect.iscode, 'mod.spam.func_code') self.istest(inspect.isframe, 'tb.tb_frame') self.istest(inspect.isfunction, 'mod.spam') @@ -91,6 +90,18 @@ class TestPredicates(IsTestBase): self.assert_(inspect.isroutine(mod.spam)) self.assert_(inspect.isroutine([].count)) + def test_isclass(self): + self.istest(inspect.isclass, 'mod.StupidGit') + self.assertTrue(inspect.isclass(list)) + + class newstyle(object): pass + self.assertTrue(inspect.isclass(newstyle)) + + class CustomGetattr(object): + def __getattr__(self, attr): + return None + self.assertFalse(inspect.isclass(CustomGetattr())) + def test_get_slot_members(self): class C(object): __slots__ = ("a", "b") diff --git a/Misc/NEWS b/Misc/NEWS index 2e9e47dbe1..4c71db1eaf 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -137,6 +137,9 @@ Core and Builtins Library ------- +- Issue #1225107: inspect.isclass() returned True for instances with a custom + __getattr__. + - Issue #3997: zipfiles generated with more than 65536 files could not be opened with other applications.