Класс object

В Python каждое значение, которое вы создаёте — строка, число, список и т.д. — это объект. Любой объект в Python наследуется от базового класса object. Это основа иерархии классов в языке.

class object:
    """
    The base class of the class hierarchy.
    """

Класс object является базовым для всех остальных классов. Это значит, что любой пользовательский класс или встроенный тип данных напрямую или опосредованно наследуется от него.


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

Предположим, у нас есть несколько классов:

class Person:
    pass

class Doctor(Person):
    pass

class Architect(Person):
    pass

class Teacher(Person):
    pass

На схеме это можно представить следующим образом:

                object
                   │
               Person
            ┌───┬───┬────┐
         Doctor Architect Teacher

Здесь, несмотря на отсутствие явного указания, класс Person на самом деле наследуется от object. Это происходит автоматически, и если захотите, вы можете явно указать это:

class Person(object):
    pass

Теперь давайте проверим, что классы действительно наследуются от object с помощью функций issubclass и isinstance:

print(issubclass(Person, object))  # True
print(isinstance(Person(), object))  # True


Методы и атрибуты класса object

Класс object предоставляет большое количество методов по умолчанию. Их можно увидеть с помощью функции dir():

print(dir(object))

Среди методов можно заметить магические методы вроде __eq__, __str__, __init__, которые дают базовую функциональность всем объектам в Python.

Например, метод __str__ позволяет нам использовать print() для объектов. Метод __eq__ позволяет сравнивать объекты:

class MyClass:
    pass

a = MyClass()
b = MyClass()

print(a == b)  # False (сравнение через __eq__)
print(str(a))  # вывод информации об объекте (работает __str__)


Иерархия встроенных типов данных

Встроенные типы данных в Python, такие как int, str, list, также наследуются от класса object. Посмотрим на несколько примеров:

class int(object):
    """
    Integer numbers
    """
class str(object):
    """
    String data
    """
class list(object):
    """
    Built-in mutable sequence.
    """

Единственным исключением является класс bool, который наследуется от int:

class bool(int):
    """
    Boolean values: True, False
    """


Схема наследования встроенных типов

Вот как выглядит схема наследования для некоторых встроенных типов данных:

                object
                   │
  ┌───┬────┬────────┼───────────┐
  int str  list  tuple  set   dict
   │
  bool


Наследование от встроенных типов

Вы можете создать свой класс, унаследовав его от любого встроенного типа. Например, создадим класс MyList, который наследуется от списка:

class MyList(list):
    def double_append(self, value):
        self.append(value)
        self.append(value)

ml = MyList()
ml.double_append(10)
print(ml)  # [10, 10]

Как видно, объект MyList получает поведение обычного списка и при этом расширяет его дополнительным методом.

Вот таблица по лекции:

ТемаОписание
Класс objectБазовый класс для всех остальных классов в Python. Любой пользовательский или встроенный класс напрямую или опосредованно наследуется от него. Это основа иерархии классов.
Пример иерархии наследованияПример с классами Person, Doctor, Architect, Teacher, которые автоматически наследуются от object. Класс Person, хотя явно не указано, наследует object. Можно явно указать наследование: class Person(object).
Проверка наследованияДля проверки, что классы наследуются от object, можно использовать функции issubclass и isinstance:
 - issubclass(Person, object)True
 - isinstance(Person(), object)True
Методы и атрибуты objectКласс object предоставляет набор методов по умолчанию, включая магические методы, такие как __eq__, __str__, __init__. Они дают базовую функциональность, например, сравнение объектов через __eq__ или преобразование объекта в строку через __str__.
Пример методов objectСоздание пользовательского класса MyClass, в котором автоматически доступны методы от класса object:
 - a == b (сравнение через __eq__)
 - print(str(a)) (вывод информации через __str__)
Иерархия встроенных типовВстроенные типы данных, такие как int, str, list, также наследуются от класса object. Единственным исключением является класс bool, который наследуется от int.
Наследование от встроенных типовМожно наследоваться от встроенных типов данных и расширять их функциональность. Пример класса MyList, который наследуется от list и добавляет новый метод double_append, позволяющий добавить элемент дважды.
Пример использования- Создание экземпляра класса MyList, который наследует поведение списка и расширяет его дополнительным методом:
 - ml.double_append(10)
 - print(ml)[10, 10]

Перейти к следующему шагу

Комментарии