fork download
  1. class A:
  2.  
  3. def __init__(self, a=0, b=0):
  4. self.a = a
  5. self.b = b
  6.  
  7. print("Creating an object of class A with a = 10, b = 20")
  8. a = A(a=10, b=20)
  9.  
  10. print("a.a = ", a.a, "a.b = ", a.b)
  11. print("assinging \"str\" to a.a")
  12. a.a = "str"
  13. print("a.a = ", a.a, "a.b = ", a.b)
  14. print("assinging 10 to a.a")
  15. a.a = 10
  16. print("a.a = ", a.a, "a.b = ", a.b)
  17.  
  18. class AProp(A):
  19. def __init__(self, *args, **kwargs):
  20. super().__init__(*args, **kwargs)
  21.  
  22. @property
  23. def a(self):
  24. return self._a
  25.  
  26. @a.setter
  27. def a(self, val):
  28. if type(val) == int:
  29. self._a = val
  30.  
  31. print("")
  32.  
  33. print("Changing class of object a to AProp")
  34. prev_a_val = a.a
  35. a.__class__ = AProp
  36. print("a = ", a)
  37.  
  38. print("assinging setting previous a value to a.a")
  39. a.a = prev_a_val
  40. a.a = 10
  41. print("a.a = ", a.a, "a.b = ", a.b)
  42. print("assinging \"str\" to a.a")
  43. a.a = "str"
  44. print("a.a = ", a.a, "a.b = ", a.b)# your code goes here
Success #stdin #stdout 0.01s 9992KB
stdin
Standard input is empty
stdout
Creating object of class A with a = 10, b = 20
a.a =  10 a.b =  20
assinging "str" to a.a
a.a =  str a.b =  20
assinging 10 to a.a
a.a =  10 a.b =  20

Changing class of object a to AProp
a =  <__main__.AProp object at 0x55adadec>
assinging setting previous a value to a.a
a.a =  10 a.b =  20
assinging "str" to a.a
a.a =  10 a.b =  20