mirror of
https://github.com/python/cpython.git
synced 2025-11-25 21:11:09 +00:00
SF #532767: isinstance(x, X) should work when x is a proxy for an X
instance, as long as x.__class__ is X or a subclass thereof. Did a little cleanup of PyObject_IsInstance() too.
This commit is contained in:
parent
73019a6321
commit
03bc7d3c4d
3 changed files with 53 additions and 7 deletions
|
|
@ -3735,7 +3735,8 @@ def dict_type_with_metaclass():
|
|||
|
||||
def meth_class_get():
|
||||
# Full coverage of descrobject.c::classmethod_get()
|
||||
if verbose: print "Testing __get__ method of METH_CLASS C methods..."
|
||||
if verbose:
|
||||
print "Testing __get__ method of METH_CLASS C methods..."
|
||||
# Baseline
|
||||
arg = [1, 2, 3]
|
||||
res = {1: None, 2: None, 3: None}
|
||||
|
|
@ -3772,6 +3773,32 @@ def meth_class_get():
|
|||
else:
|
||||
raise TestFailed, "shouldn't have allowed descr.__get__(None, int)"
|
||||
|
||||
def isinst_isclass():
|
||||
if verbose:
|
||||
print "Testing proxy isinstance() and isclass()..."
|
||||
class Proxy(object):
|
||||
def __init__(self, obj):
|
||||
self.__obj = obj
|
||||
def __getattribute__(self, name):
|
||||
if name.startswith("_Proxy__"):
|
||||
return object.__getattribute__(self, name)
|
||||
else:
|
||||
return getattr(self.__obj, name)
|
||||
# Test with a classic class
|
||||
class C:
|
||||
pass
|
||||
a = C()
|
||||
pa = Proxy(a)
|
||||
verify(isinstance(a, C)) # Baseline
|
||||
verify(isinstance(pa, C)) # Test
|
||||
# Test with a new-style class
|
||||
class C(object):
|
||||
pass
|
||||
a = C()
|
||||
pa = Proxy(a)
|
||||
verify(isinstance(a, C)) # Baseline
|
||||
verify(isinstance(pa, C)) # Test
|
||||
|
||||
|
||||
def test_main():
|
||||
do_this_first()
|
||||
|
|
@ -3859,6 +3886,7 @@ def test_main():
|
|||
subclass_right_op()
|
||||
dict_type_with_metaclass()
|
||||
meth_class_get()
|
||||
isinst_isclass()
|
||||
|
||||
if verbose: print "All OK"
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue