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