@zlodiak

Полиморфна ли эта функция?

Не совсем понимаю сущность полиморфизма, помогите пожалуйста разобраться. Правильно ли я понимаю, что метод Logger.makeLog() является полиморфным?

#!/usr/bin/env python3

class Product:
    def __init__(self, title, logger):
        self.title = title
        self.logger = logger

    def setPrice(self, price):
        try:
            if price <= 0: raise Exception('wrong price!')
            self.price = price
        except Exception as e:
            self.logger.makeLog(e)

class Logger:
    def __init__(self, type):
        self.log = []
        self.type = type

    def makeLog(self, message):
        getattr(self, self.type)(message)

    def printLog(self, message):
        print('error: ', message)

    def fillLog(self, message):
        self.log.append(message)

logger = Logger('printLog')
product = Product('phone', logger)
product.setPrice(-10)


Я понимаю полиморфизм так:
Если функция в зависимости от полученного аргумента выполняет различные действия, то она полиморфна. При этом могу быть следующие варианты:
1. имеет значение количество аргументов(в python это не работает, но можно эмулировать при помощи условного оператора)
2. имеет значение тип переданного аргумента(в python этого нет, но тоже можно эмулировать при помощи условного оператора)
3. использовать аргумент для динамического выполнения функции(это реализовано в приведённом мной выше примере)
  • Вопрос задан
  • 347 просмотров
Пригласить эксперта
Ответы на вопрос 2
@AlexSku
не буду отвечать из-за модератора
В Haskell два вида полиморфизма:
- специальный (напр., сложение для целых и дробных чисел)
- общий (напр., длина списка независимо от типа элементов).
Ответ написан
@MechanicZelenyy
То что вы описали в статической типизации называется перегрузкой методов, а не полиморфизмом. Полиморфизм про изменение поведение в наследниках.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы