Interview Q&A / Python

INTERVIEW Q&A · 81 QUESTIONS

Python interview questions

Lists, dictionaries, generators, decorators and the Python questions asked in service-company and data roles.

  1. How do you create and raise a custom exception in Python?

    Subclass Exception (not BaseException), give it a clear name ending in Error, and raise it with raise. Add attributes or a message in __init__ if callers need details. A shared base class lets callers catch a whole family.

    BeginnerQuick answer1 min read
  2. What is the difference between __str__ and __repr__ in Python?

    __str__ gives a readable description meant for users and is used by print() and str(). __repr__ gives an unambiguous description meant for developers, ideally looking like code that recreates the object. If only __repr__ exists, print falls back to it.

    BeginnerQuick answer1 min read
  3. What is the difference between type() and isinstance() in Python?

    type(x) returns the exact class of x, so comparing with == ignores inheritance. isinstance(x, C) is True if x is an instance of C or of any subclass of C, so it is the usual choice for type checks.

    BeginnerQuick answer1 min read
  4. How do you make your own class work with +, len() and indexing in Python?

    Implement the matching dunder methods: __add__ for +, __len__ for len(), and __getitem__ for obj[i]. Python translates the syntax into calls to these methods, so no inheritance from built-in types is needed.

    IntermediateQuick answer1 min read
  5. What does super() do in Python, and why call super().__init__()?

    super() returns a proxy that looks up methods on the next class in the MRO. Calling super().__init__() runs the parent's initialiser so the inherited setup is not skipped. If a child defines __init__ and does not call it, the parent's attributes are never created.

    IntermediateQuick answer1 min read
  6. What does the @property decorator do in Python?

    @property turns a method into a read-only attribute, so obj.area calls the method without parentheses. Adding @name.setter lets you validate or compute on assignment while callers still use plain attribute syntax.

    IntermediateQuick answer1 min read
  7. What is the difference between @classmethod, @staticmethod and an instance method?

    An instance method receives self, the object. A classmethod receives cls, the class, and is commonly used for alternative constructors. A staticmethod receives neither and is just a function living in the class namespace.

    IntermediateQuick answer1 min read
  8. What is the difference between a class attribute and an instance attribute, and what does this code print?

    A class attribute is shared by all instances. An instance attribute belongs to one object. Assigning through an instance, like a.count = 5, creates a new instance attribute that shadows the class one, but mutating a shared list changes it for everyone.

    IntermediateQuick answer1 min read
  9. What is the Method Resolution Order (MRO) in Python, and how does it work with multiple inheritance?

    The MRO is the order in which Python searches a class and its parents for an attribute. It uses C3 linearization: children come before parents, and the order of bases you wrote is kept. You can see it with ClassName.__mro__ or mro().

    AdvancedQuick answer1 min read
  10. Why must you define __hash__ when you define __eq__ for objects used in sets or as dict keys?

    Objects that compare equal must have the same hash, or sets and dicts will treat them as different. Defining __eq__ without __hash__ sets __hash__ to None, so the class becomes unhashable. Base the hash on the same fields that __eq__ compares.

    AdvancedQuick answer1 min read