Комментарии (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, обеспечивающая единообразный интерфейс для всех объектов в системе.