Быстрый в изучении - мощный в программировании
>> Telegram ЧАТ для Python Программистов

Свободное общение и помощь советом и решением проблем с кодом! Заходите в наш TELEGRAM ЧАТ!

>> Python Форум Помощи!

Мы создали форум где отвечаем на все вопросы связанные с языком программирования Python. Ждем вас там!

>> Python Канал в Telegram

Обучающие статьи, видео и новости из мира Python. Подпишитесь на наш TELEGRAM КАНАЛ!

Классы нового стиля. ООП в Python

27 августа 2013 г. Archy Просмотров: 22237 RSS
ООП на Python , ,

Классы нового стиля

Начиная с Python 2.2, помимо классических классов существует классы так называемого нового стиля. Классом нового стиля называется класс, у которого базовым классом является встроенный объект (например, list или dict) или объект object. Для классов старого и нового стили отличаются результатом выполнения функции type(), а также вывод атрибутов __class__ и __bases__ для экземпляров классов.

Классы нового стиля

class Class1:          # Классический класс
    pass
 
class Class2(object):  # Класс нового стиля
    pass
 
class Class3(list):    # Класс нового стиля
    pass
 
print type(Class1)     # Выведет: 
print type(Class2)     # Выведет: 
print type(Class3)     # Выведет: 
# __bases__ содержит кортеж с базовыми классами
 
print Class1.__bases__ # Выведет: ()
print Class2.__bases__ # Выведет: (,)
print Class3.__bases__ # Выведет: (,)
c1, c2, c3 = Class1(), Class2(), Class3()
 
print c1.__class__     # Выведет: __main__.Class1
print c2.__class__     # Выведет: 
print c3.__class__     # Выведет: 
print type(c1)         # Выведет: 
print type(c2)         # Выведет: 
print type(c3)         # Выведет: 

Кроме того, в классах нового стиля другой порядок поиска идентификаторов при множественном наследовании. Рассмотрим это на примере.

Поиск идентификаторов при множественном наследовании

class Class1(object):  # Класс нового стиля
#class Class1:         # Классический класс
    var1 = "Это значение в классических классах"
 
class Class2(Class1): pass
class Class3(Class2): pass
class Class4(Class3): pass
 
class Class5(Class2):
    var1 = "Это значение в классах нового стиля"
 
class Class6(Class5): pass
class Class7(Class4, Class6): pass
c1 = Class7()
print c1.var1

Если используется классические классы, то атрибут var1 будет найден в классе Class1, т.к. просматривается вся ветка наследования для класса Class4. Если используется классы нового стиля, то атрибут var1 будет найден в классе Class5, т.к. при достижения класса Class2 поиск будет производиться в ветке класса Class6, стоящего в списке наследования вторым. Класс Class2 для классов Class4 и Class6 является общим предком.

Все автолюбители знают, что хорошие запчасти могут быть только в стране где производится автомобиль а все остальное либо подделка или б/у. Интернет магазин автозапчастей Украина может помочь вам в выборе недостающей части чтобы выполнить полноценный ремонт автомобиля. Все запчасти качественные и импортированы за границей. Можно так же, заказать доставку индивидуальных запчастей.