are special methods in python that start and end with double underscores, like __init__,__str__etc. Automatically get called when you perform certain action on an object.
Object-Oriented Programming or OOPs refers to languages that use objects in programming. Object-oriented programming aims to implement real-world entities like inheritance, hiding, polymorphism, etc ...