Answer the question
In order to leave comments, you need to log in
Is this function polymorphic?
I do not quite understand the essence of polymorphism, please help me figure it out. Do I understand correctly that the Logger.makeLog() method is polymorphic?
#!/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. использовать аргумент для динамического выполнения функции(это реализовано в приведённом мной выше примере)
Answer the question
In order to leave comments, you need to log in
There are two kinds of polymorphism in Haskell:
- special (eg, addition for integers and fractions)
- general (eg, the length of a list, regardless of the type of elements).
What you described in static typing is called method overloading, not polymorphism. Polymorphism is about changing behavior in descendants.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question