super() для вызова методов родительского класса:
  
class Parent:
  def __init__(self, value):
    self.value = value
class Child(Parent):
  def __init__(self, value, extra):
    super().__init__(value)
    self.extra = extra
  def get_parent_value(self):
    return super().value # Доступ к атрибуту value родительского класса
  
class Parent:
  def __init__(self, value):
    self.value = value
class Child(Parent):
  def __init__(self, value, extra):
    Parent.__init__(self, value)
    self.extra = extra
  def get_parent_value(self):
    return Parent.value # Прямой доступ, но не рекомендуется
  Существует несколько способов получить доступ к атрибутам родительского класса из дочернего класса в Python:
super():  super() возвращает временный объект родительского класса, позволяя вам вызывать его методы и получать доступ к его атрибутам.  Это наиболее предпочтительный и идиоматичный способ.
      class Родитель:
  атрибут_родителя = "Значение родителя"
  def метод_родителя(self):
    return "Сообщение от родителя"
class Дочерний(Родитель):
  def получить_атрибут(self):
    return super().атрибут_родителя  # Доступ к атрибуту родителя
  def вызвать_метод(self):
    return super().метод_родителя() # Вызов метода родителя
дочерний_объект = Дочерний()
print(дочерний_объект.получить_атрибут()) # Вывод: Значение родителя
print(дочерний_объект.вызвать_метод())  # Вывод: Сообщение от родителя
., например, Родитель.атрибут или Родитель.метод(self).
      class Родитель:
  атрибут_родителя = "Значение родителя"
  def метод_родителя(self):
    return "Сообщение от родителя"
class Дочерний(Родитель):
  def получить_атрибут(self):
    return Родитель.атрибут_родителя
  def вызвать_метод(self):
    return Родитель.метод_родителя(self)
дочерний_объект = Дочерний()
print(дочерний_объект.получить_атрибут())
print(дочерний_объект.вызвать_метод())
super().  Рекомендуется избегать этого способа.__class__.__bases__ (редко используется):  Этот атрибут содержит кортеж с базовыми классами текущего класса.  Однако, прямой доступ через этот атрибут обычно не рекомендуется, так как это считается низкоуровневым решением и менее читабельным.  Лучше использовать super().
     class Родитель:
  атрибут_родителя = "Значение родителя"
class Дочерний(Родитель):
  def получить_атрибут(self):
    return self.__class__.__bases__[0].атрибут_родителя
дочерний_объект = Дочерний()
print(дочерний_объект.получить_атрибут()) # Вывод: Значение родителя
Рекомендация:  Всегда используйте super(), если это возможно.  Это лучший способ получить доступ к атрибутам и методам родительского класса, особенно в сложных иерархиях наследования.