@@ -655,8 +655,12 @@ def test_check_shape(target, test_shape):
655
655
656
656
def test_setattr_cm ():
657
657
class A :
658
+
659
+ cls_level = object ()
660
+ override = object ()
658
661
def __init__ (self ):
659
662
self .aardvark = 'aardvark'
663
+ self .override = 'override'
660
664
self ._p = 'p'
661
665
662
666
def meth (self ):
@@ -670,7 +674,10 @@ def prop(self):
670
674
def prop (self , val ):
671
675
self ._p = val
672
676
673
- a = A ()
677
+ class B (A ):
678
+ ...
679
+
680
+ a = B ()
674
681
# When you access a Python method the function is bound
675
682
# to the object at access time so you get a new instance
676
683
# of MethodType every time.
@@ -683,19 +690,28 @@ def prop(self, val):
683
690
# and our property happens to give the same instance every time
684
691
assert a .prop is a .prop
685
692
693
+ assert a .cls_level is A .cls_level
694
+
695
+ assert a .override == 'override'
696
+
686
697
with cbook ._setattr_cm (
687
698
a ,
688
- aardvark = 'moose' , meth = lambda : None , prop = 'b'
699
+ aardvark = 'moose' , meth = lambda : None , prop = 'b' , cls_level = 'bob' ,
700
+ override = 'boo'
689
701
):
690
702
# because we have set a lambda, it is normal attribute access
691
703
# and the same every time
692
704
assert a .meth is a .meth
693
705
assert a .aardvark is a .aardvark
694
706
assert a .aardvark == 'moose'
695
707
assert a .prop == 'b'
708
+ assert a .cls_level == 'bob'
709
+ assert a .override == 'boo'
696
710
697
711
# check that we get different MethodType instances each time
698
712
assert a .meth is not a .meth
699
713
assert a .aardvark is a .aardvark
700
714
assert a .aardvark == 'aardvark'
701
715
assert a .prop is a .prop
716
+ assert a .cls_level is A .cls_level
717
+ assert a .override == 'override'
0 commit comments