difference between abstraction and encapsulation in python