class A:
def __init__ ( self , a= 0 , b= 0 ) :
self .a = a
self .b = b
print ( "Creating an object of class A with a = 10, b = 20" )
a = A( a= 10 , b= 20 )
print ( "a.a = " , a.a , "a.b = " , a.b )
print ( "assinging \" str\" to a.a" )
a.a = "str"
print ( "a.a = " , a.a , "a.b = " , a.b )
print ( "assinging 10 to a.a" )
a.a = 10
print ( "a.a = " , a.a , "a.b = " , a.b )
class AProp( A) :
def __init__ ( self , *args, **kwargs) :
super ( ) .__init__ ( *args, **kwargs)
@ property
def a( self ) :
return self ._a
@ a.setter
def a( self , val) :
if type ( val) == int :
self ._a = val
print ( "" )
print ( "Changing class of object a to AProp" )
prev_a_val = a.a
a.__class__ = AProp
print ( "a = " , a)
print ( "assinging setting previous a value to a.a" )
a.a = prev_a_val
a.a = 10
print ( "a.a = " , a.a , "a.b = " , a.b )
print ( "assinging \" str\" to a.a" )
a.a = "str"
print ( "a.a = " , a.a , "a.b = " , a.b ) # your code goes here
Y2xhc3MgQToKCQoJZGVmIF9faW5pdF9fKHNlbGYsIGE9MCwgYj0wKToKCQlzZWxmLmEgPSBhCgkJc2VsZi5iID0gYgoKcHJpbnQoIkNyZWF0aW5nIGFuIG9iamVjdCBvZiBjbGFzcyBBIHdpdGggYSA9IDEwLCBiID0gMjAiKQphID0gQShhPTEwLCBiPTIwKQoKcHJpbnQoImEuYSA9ICIsIGEuYSwgImEuYiA9ICIsIGEuYikKcHJpbnQoImFzc2luZ2luZyBcInN0clwiIHRvIGEuYSIpCmEuYSA9ICJzdHIiCnByaW50KCJhLmEgPSAiLCBhLmEsICJhLmIgPSAiLCBhLmIpCnByaW50KCJhc3NpbmdpbmcgMTAgdG8gYS5hIikKYS5hID0gMTAKcHJpbnQoImEuYSA9ICIsIGEuYSwgImEuYiA9ICIsIGEuYikKCmNsYXNzIEFQcm9wKEEpOgoJZGVmIF9faW5pdF9fKHNlbGYsICphcmdzLCAqKmt3YXJncyk6CgkJc3VwZXIoKS5fX2luaXRfXygqYXJncywgKiprd2FyZ3MpCgkKCUBwcm9wZXJ0eQoJZGVmIGEoc2VsZik6CgkJcmV0dXJuIHNlbGYuX2EKCQoJQGEuc2V0dGVyCglkZWYgYShzZWxmLCB2YWwpOgoJCWlmIHR5cGUodmFsKSA9PSBpbnQ6CgkJCXNlbGYuX2EgPSB2YWwKCnByaW50KCIiKQoKcHJpbnQoIkNoYW5naW5nIGNsYXNzIG9mIG9iamVjdCBhIHRvIEFQcm9wIikKcHJldl9hX3ZhbCA9IGEuYQphLl9fY2xhc3NfXyA9IEFQcm9wCnByaW50KCJhID0gIiwgYSkKCnByaW50KCJhc3Npbmdpbmcgc2V0dGluZyBwcmV2aW91cyBhIHZhbHVlIHRvIGEuYSIpCmEuYSA9IHByZXZfYV92YWwKYS5hID0gMTAKcHJpbnQoImEuYSA9ICIsIGEuYSwgImEuYiA9ICIsIGEuYikKcHJpbnQoImFzc2luZ2luZyBcInN0clwiIHRvIGEuYSIpCmEuYSA9ICJzdHIiCnByaW50KCJhLmEgPSAiLCBhLmEsICJhLmIgPSAiLCBhLmIpIyB5b3VyIGNvZGUgZ29lcyBoZXJl