← Назад к вопросам

От чего наследуется базовый класс?

1.0 Junior🔥 121 комментариев
#Python Core

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Наследование базового класса в Python

В Python 3 все классы явно или неявно наследуются от класса object. Это фундаментальная концепция объектно-ориентированного программирования.

Явное и неявное наследование

Неявное наследование: Если вы не указываете родительский класс, ваш класс автоматически наследуется от object:

class MyClass:
    pass

# Эквивалентно:
class MyClass(object):
    pass

print(issubclass(MyClass, object))  # True

Иерархия наследования

Все встроенные типы в Python также наследуются от object:

class Animal:
    def speak(self):
        pass

class Dog(Animal):
    pass

# Dog → Animal → object
print(Dog.__mro__)  # (<class "Dog">, <class "Animal">, <class "object">)
MRO (Method Resolution Order) показывает порядок поиска методов при множественном наследовании.

Методы базового класса object

Поскольку все классы наследуются от object, они получают стандартные методы:

class Person:
    def __init__(self, name):
        self.name = name

p = Person("Alice")

# Методы из object
print(str(p))  # <__main__.Person object at 0x...>
print(repr(p))  # <__main__.Person object at 0x...>
print(hash(p))  # 8789234 (уникальный ID)
print(dir(p))  # Список всех методов и атрибутов

Переопределение методов object

Вы можете переопределить методы базового класса для кастомного поведения:

class Person:
    def __init__(self, name):
        self.name = name
    
    def __str__(self):
        return f"Person: {self.name}"
    
    def __repr__(self):
        return f"Person(name={self.name!r})"
    
    def __eq__(self, other):
        if not isinstance(other, Person):
            return False
        return self.name == other.name

p1 = Person("Alice")
p2 = Person("Alice")

print(str(p1))  # Person: Alice
print(p1 == p2)  # True

Множественное наследование

В Python класс может наследоваться от нескольких родителей:

class Flyer:
    def fly(self):
        print("Flying...")

class Walker:
    def walk(self):
        print("Walking...")

class Bird(Flyer, Walker):
    pass

birdie = Bird()
birdie.fly()   # Flying...
birdie.walk()  # Walking...

# MRO для множественного наследования
print(Bird.__mro__)
# (<class "Bird">, <class "Flyer">, <class "Walker">, <class "object">)

Важные аспекты

Ключевые моменты:

  • Все классы в Python 3 наследуются от object (если явно не указано иное)
  • object содержит базовые методы: init, str, repr, eq, hash и др.
  • MRO определяет порядок поиска методов в иерархии наследования
  • super() используется для обращения к методам родительского класса
class Animal:
    def __init__(self, name):
        self.name = name

class Dog(Animal):
    def __init__(self, name, breed):
        super().__init__(name)  # Вызов __init__ родителя
        self.breed = breed

Это база объектно-ориентированного программирования в Python, обеспечивающая единообразный интерфейс для всех объектов в системе.

От чего наследуется базовый класс? | PrepBro