Is it really how it works?
No, it won't create a new object, it will return the same instance. You can check it by using is
keyword, which checks if two objects are the same:
t = TestClass(3)
c = t.method_a(4)
print t is c
>>> True
Is it good practice to use return self in python methods?
Yes, it's often used to allow chaining.