Z
Z
zlodiak2019-03-17 19:44:51
Python
zlodiak, 2019-03-17 19:44:51

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)

I understand polymorphism like this:
Если функция в зависимости от полученного аргумента выполняет различные действия, то она полиморфна. При этом могу быть следующие варианты:
1. имеет значение количество аргументов(в python это не работает, но можно эмулировать при помощи условного оператора)
2. имеет значение тип переданного аргумента(в python этого нет, но тоже можно эмулировать при помощи условного оператора)
3. использовать аргумент для динамического выполнения функции(это реализовано в приведённом мной выше примере)

Answer the question

In order to leave comments, you need to log in

2 answer(s)
A
Alexander Skusnov, 2019-03-17
@AlexSku

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).

M
MechanicZelenyy, 2019-05-01
@MechanicZelenyy

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 question

Ask a Question

731 491 924 answers to any question