Module (85%)
Section (96%)

Основные тезисы


1. Метод с именем __str__() отвечает за преобразование содержимого объекта в (более или менее) читаемую строку. Вы можете переопределить его, если хотите, чтобы Ваш объект мог представить себя в более элегантной форме. Например:

class Mouse: def __init__(self, name): self.my_name = name def __str__(self): return self.my_name the_mouse = Mouse('mickey') print(the_mouse) # Prints "mickey".

2. Функция с именем issubclass(Class_1, Class_2) может определить, является ли Class_1 подклассом Class_2. Например:

class Mouse: pass class LabMouse(Mouse): pass print(issubclass(Mouse, LabMouse), issubclass(LabMouse, Mouse)) # Prints "False True"

3. Функция с именем isinstance(Object, Class) проверяет, принадлежит ли объект указанному классу. Например:

class Mouse: pass class LabMouse(Mouse): pass mickey = Mouse() print(isinstance(mickey, Mouse), isinstance(mickey, LabMouse)) # Prints "True False".

4. Оператор is проверяет, ссылаются ли две переменные на один и тот же объект. Например:

class Mouse: pass mickey = Mouse() minnie = Mouse() cloned_mickey = mickey print(mickey is minnie, mickey is cloned_mickey) # Prints "False True".

5. Функция без параметров с именем super() возвращает ссылку на ближайший суперкласс класса. Например:

class Mouse: def __str__(self): return "Mouse" class LabMouse(Mouse): def __str__(self): return "Laboratory " + super().__str__() doctor_mouse = LabMouse(); print(doctor_mouse) # Prints "Laboratory Mouse".

6. Методы, а также переменные экземпляра и класса, определенные в суперклассе, автоматически наследуются их подклассами. Например:

class Mouse: Population = 0 def __init__(self, name): Mouse.Population += 1 self.name = name def __str__(self): return "Hi, my name is " + self.name class LabMouse(Mouse): pass professor_mouse = LabMouse("Professor Mouser") print(professor_mouse, Mouse.Population) # Prints "Hi, my name is Professor Mouser 1"

7. Чтобы найти какое-либо свойство объекта/класса, Python ищет его внутри:

  • собственно объекта;
  • всех классов, участвующих в линии наследования объекта снизу вверх;
  • если на конкретном пути наследования имеется более одного класса, Python сканирует их слева направо;
  • если оба вышеперечисленных пункта неуспешны, возникает исключение AttributeError.


8. Если какой-либо из подклассов определяет метод/переменную класса/переменную экземпляра с тем же именем, что и существующий в суперклассе, новое имя переопределяет любой из предыдущих экземпляров имени. Например:

class Mouse: def __init__(self, name): self.name = name def __str__(self): return "My name is " + self.name class AncientMouse(Mouse): def __str__(self): return "Meum nomen est " + self.name mus = AncientMouse("Caesar") # Prints "Meum nomen est Caesar" print(mus)