Не совсем понимаю сущность полиморфизма, помогите пожалуйста разобраться. Правильно ли я понимаю, что метод 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. использовать аргумент для динамического выполнения функции(это реализовано в приведённом мной выше примере)