Основные тезисы
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)