Inheritance

Basic Inheritance

  1. # base class
  2. class Animal:
  3. def speak(self):
  4. return "Some sound"
  5. #ans: derived class
  6. class Dog(Animal):
  7. def speak(self):
  8. return "Woof!"
  9. Dog().speak()
  10. #ans: "Woof!"

Inheriting Attributes

  1. # inherit __init__
  2. class Animal:
  3. def __init__(self, name):
  4. self.name = name
  5. class Dog(Animal):
  6. pass
  7. Dog("Rex").name
  8. #ans: "Rex"

Using super()

  1. # call parent __init__
  2. class Animal:
  3. def __init__(self, name):
  4. self.name = name
  5. class Dog(Animal):
  6. def __init__(self, name, breed):
  7. super().__init__(name)
  8. self.breed = breed
  9. Dog("Rex", "Lab").name
  10. #ans: "Rex"

Override Methods

  1. # override parent method
  2. class Animal:
  3. def speak(self):
  4. return "Sound"
  5. class Dog(Animal):
  6. def speak(self):
  7. return "Woof!"
  8. Dog().speak()
  9. #ans: "Woof!"

Call Parent Method

  1. # call parent from child
  2. class Animal:
  3. def speak(self):
  4. return "Sound"
  5. class Dog(Animal):
  6. def speak(self):
  7. parent = super().speak()
  8. return f"{parent} and Woof!"
  9. Dog().speak()
  10. #ans: "Sound and Woof!"

Exercises - Part 1

  1. # isinstance with inheritance?
  2. class Animal:
  3. pass
  4. class Dog(Animal):
  5. pass
  6. dog = Dog()
  7. isinstance(dog, Animal)
  8. #ans: True

Exercises - Part 2

  1. # issubclass?
  2. class Animal:
  3. pass
  4. class Dog(Animal):
  5. pass
  6. issubclass(Dog, Animal)
  7. #ans: True

Exercises - Part 3

  1. # method resolution order?
  2. class Animal:
  3. def speak(self):
  4. return "A"
  5. class Dog(Animal):
  6. pass
  7. Dog().speak()
  8. #ans: "A" (inherited)

Exercises - Part 4

  1. # super() without override?
  2. class Base:
  3. def method(self):
  4. return 1
  5. class Derived(Base):
  6. def other(self):
  7. return super().method()
  8. Derived().other()
  9. #ans: 1

Exercises - Part 5

  1. # multiple inheritance?
  2. class A:
  3. def method(self):
  4. return "A"
  5. class B:
  6. def method(self):
  7. return "B"
  8. class C(A, B):
  9. pass
  10. C().method()
  11. #ans: "A" (left to right)

Exercises - Part 6

  1. # __mro__?
  2. class Animal:
  3. pass
  4. class Dog(Animal):
  5. pass
  6. Dog.__mro__
  7. #ans: (Dog, Animal, object)

Exercises - Part 7

  1. # override __init__ without super?
  2. class Base:
  3. def __init__(self):
  4. self.x = 1
  5. class Derived(Base):
  6. def __init__(self):
  7. self.y = 2
  8. Derived().x
  9. #ans: AttributeError (no super call)

Exercises - Part 8

  1. # call grandparent?
  2. class A:
  3. def method(self):
  4. return "A"
  5. class B(A):
  6. def method(self):
  7. return "B"
  8. class C(B):
  9. def method(self):
  10. return super(B, self).method()
  11. C().method()
  12. #ans: "A"

Exercises - Part 9

  1. # inherit from object?
  2. class MyClass:
  3. pass
  4. #ans: implicitly inherits from object
  5. isinstance(MyClass(), object)
  6. #ans: True

Exercises - Part 10

  1. # diamond problem?
  2. class A:
  3. def method(self):
  4. return "A"
  5. class B(A):
  6. pass
  7. class C(A):
  8. pass
  9. class D(B, C):
  10. pass
  11. D().method()
  12. #ans: "A" (MRO: D, B, C, A, object)

Google tag (gtag.js)