Объектная модель Python

ООП: Поддержка в ЯП объектного проектирования. Статья на Википедии внезапно стала более вменяемой, интересной, но хуже читаемой: Объектно-ориентированное_программирование

Абстрагирование

Перегрузка операций

(Для тех, кто всё-таки прочитал WP-статью про полиморфизм: в Питоне за полиморфизм отвечает duck typing, а не это!)

Базовая статья

Операций нет, а есть методы; операции — это

Базовые функции

Последовательности и прочие хранилища

Числа

Property

Реализованы с помощью дескрипторов (см. след. лекцию)

Д/З

  1. Прочитать про классы в tutorial; про «волшебные методы» например, тут

  2. EJudge: DahDit 'Морзянка'

    Написать класс morse("строка"), экземпляр которого переводит арифметические выражения в морзянку! Параметр «строка» бывает разных видов, более подробно описан в подсказках, желающие могут догадаться о его компонентах по примеру (пример почти полный). «+» — точка, «-» — тире, «~» — промежуток между буквами (бывает только между буквами и только один, проверять не надо).

    Input:

       1 print(-+morse())
       2 print(-++~+-+morse())
       3 print(--+~-~-++~+++-morse())
       4 print(--+~-~-++~+++-morse(".-"))
       5 print(--+~-~-++~+++-morse("..-"))
       6 print(--+~-~-++~+++-morse("..-|"))
       7 print(--+~-~-++~+++-morse("dot DOT dash"))
       8 print(--+~-~-++~+++-morse("ai aui oi "))
       9 print(--+~-~-++~+++-morse("dot dot dash ///")) 
    
    Output:

    dah dit.
    dah di dit, di dah dit.
    dah dah dit, dah, dah di dit, di di di dah.
    --. - -.. ...-
    --. - -.. ...-
    --. - -.. ...-|
    dash dash DOT, dash, dash dot DOT, dot dot dot dash.
    oi oi aui, oi, oi ai aui, ai ai ai oi
    dash dash dot, dash, dash dot dot, dot dot dot dash///
  3. EJudge: CyberSausage 'Киберколбаса'

    Написать класс sausage, имитирующий киберколбасу. Киберколбаса может быть проинициализирована нулём значений (создаётся колбаса по умолчанию), одним (фарш) и двумя (фарш и объём). Длина целого батона киберколбасы 12 символов фарша и 2 оболочки. Колбаса единичного объёма — это один полный батон, более, чем единичного — это несколько батонов (последний, возможно, неполон). Неполный батон заканчивается срезом. Киберколбаса поддерживает операции умножения и деления на целое число, а также сложения и вычитания с другой киберколбасой (фарш результата совпадает с фаршем первого операнда). Если объём киберколбасы нулевой, батон считается пустым.

    Input:

       1 a, b, c = sausage(), sausage("HAM", "5/6"), sausage("SPAM.", 1.25)
       2 print(a, b, c, sep="\n")
       3 print(a+b+c)
       4 print(b*2, 4*c/5, sep="\n")
       5 d, e = b+a/6-5*c/4, a-c
       6 print(d, not d)
       7 print(e, not e)
    
    Output:

    /------------\
    |pork!pork!po|
    |pork!pork!po|
    |pork!pork!po|
    \------------/
    /----------|
    |HAMHAMHAMH|
    |HAMHAMHAMH|
    |HAMHAMHAMH|
    \----------|
    /------------\/---|
    |SPAM.SPAM.SP||SPA|
    |SPAM.SPAM.SP||SPA|
    |SPAM.SPAM.SP||SPA|
    \------------/\---|
    /------------\/------------\/------------\/-|
    |pork!pork!po||pork!pork!po||pork!pork!po||p|
    |pork!pork!po||pork!pork!po||pork!pork!po||p|
    |pork!pork!po||pork!pork!po||pork!pork!po||p|
    \------------/\------------/\------------/\-|
    /------------\/--------|
    |HAMHAMHAMHAM||HAMHAMHA|
    |HAMHAMHAMHAM||HAMHAMHA|
    |HAMHAMHAMHAM||HAMHAMHA|
    \------------/\--------|
    /------------\
    |SPAM.SPAM.SP|
    |SPAM.SPAM.SP|
    |SPAM.SPAM.SP|
    \------------/
    /|
    ||
    ||
    ||
    \| True
    /|
    ||
    ||
    ||
    \| True
  4. EJudge: SelfCount 'Сколько экземпляров'

    Написать класс WeAre, объекты которого содержат поле count, содержащее количество существующих экземпляров этого класса. Игнорировать попытки изменить значение этого поля вручную или удалить его.

    Input:

       1 a = WeAre()
       2 print(a.count)
       3 b, c = WeAre(), WeAre(),
       4 a.count = 100500
       5 print(a.count, b.count, c.count)
       6 del b.count
       7 del b
       8 print(a.count)
    
    Output:

    1
    3 3 3
    2

LecturesCMC/PythonIntro2019/10_ObjectModel (last edited 2019-11-26 13:53:17 by FrBrGeorge)