difference between encapsulation and abstraction in python