fix inspect.isclass() on instances with a custom __getattr__ #1225107

This commit is contained in:
Benjamin Peterson 2009-01-17 22:27:54 +00:00
parent 59ce042766
commit 5e5fbb612d
3 changed files with 16 additions and 2 deletions

View File

@ -62,7 +62,7 @@ def isclass(object):
Class objects provide these attributes: Class objects provide these attributes:
__doc__ documentation string __doc__ documentation string
__module__ name of module in which this class was defined""" __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): def ismethod(object):
"""Return true if the object is an instance method. """Return true if the object is an instance method.

View File

@ -65,7 +65,6 @@ class TestPredicates(IsTestBase):
def test_excluding_predicates(self): def test_excluding_predicates(self):
self.istest(inspect.isbuiltin, 'sys.exit') self.istest(inspect.isbuiltin, 'sys.exit')
self.istest(inspect.isbuiltin, '[].append') self.istest(inspect.isbuiltin, '[].append')
self.istest(inspect.isclass, 'mod.StupidGit')
self.istest(inspect.iscode, 'mod.spam.func_code') self.istest(inspect.iscode, 'mod.spam.func_code')
self.istest(inspect.isframe, 'tb.tb_frame') self.istest(inspect.isframe, 'tb.tb_frame')
self.istest(inspect.isfunction, 'mod.spam') self.istest(inspect.isfunction, 'mod.spam')
@ -91,6 +90,18 @@ class TestPredicates(IsTestBase):
self.assert_(inspect.isroutine(mod.spam)) self.assert_(inspect.isroutine(mod.spam))
self.assert_(inspect.isroutine([].count)) 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): def test_get_slot_members(self):
class C(object): class C(object):
__slots__ = ("a", "b") __slots__ = ("a", "b")

View File

@ -137,6 +137,9 @@ Core and Builtins
Library 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 - Issue #3997: zipfiles generated with more than 65536 files could not be
opened with other applications. opened with other applications.