fix inspect.isclass() on instances with a custom __getattr__ #1225107
This commit is contained in:
parent
59ce042766
commit
5e5fbb612d
|
@ -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.
|
||||||
|
|
|
@ -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")
|
||||||
|
|
|
@ -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.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue