Полиморфизм в Python VS Полиморфизм в JAVA - PullRequest
0 голосов
/ 10 апреля 2020

Я пытаюсь понять полиморфизм в python. Прочитал много статей, но есть еще одно сомнение в моем уме. Когда я сравниваю с java, это немного смущает меня в Python.

Насколько я знаю, полиморфизм - это «одна вещь во многих формах». Полиморфизм может быть продемонстрирован с использованием перегрузки операторов и перегрузки методов. Давайте возьмем перегрузку метода как средство демонстрации концепции полиморфизма. В java мы можем написать это без использования наследования. См. Ниже код.

 public class Main{
    public static void main(String[] args) {
        System.out.println(add(1,2));;
        System.out.println(add(1,2,3));
    }
    public static int add(int a,int b){
        return a+b;
    }
    public static int add(int a,int b,int c){
        return a+b+c;
    }   
}

Python код:

class TestPolymorphism:
    def add(self,a,b):
        return (a+b)
    def add(self,a,b,c):
        return (a+b+c)

obj = TestPolymorphism()
print(obj.add(1,2)) #will get an error
print(obj.add(1,2,3))

Тот же метод перегрузки работает в java, но не в python. Почему есть разница? Если я хочу, чтобы он работал, я должен изменить свой python код, как показано ниже:

class TestPolymorphism:
    def add(self,a,b,c=None):
        if c ==None:
            sum  = a+b
            return sum
        else:
            sum = a+b+c
            return sum

obj = TestPolymorphism()
print(obj.add(1,2))
print(obj.add(1,2,3))

Я не уверен, что приведенный выше код является примером полиморфизма. Есть статья вроде this , которая не дает мне убедительного аргумента.

Может кто-нибудь дать мне теорию, стоящую за полиморфизмом в python?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2020

Что я понимаю в java, даже если у вас одно и то же имя метода, у вас другой метод, а в python, когда у вас есть:

class TestPolymorphism:
def add(self,a,b):
    return (a+b)
def add(self,a,b,c):
    return (a+b+c)

последнее добавление, которое вы пишете переопределите последние.

В заключение, когда вы добавляете с разными аргументами лучший вариант add (self, a, b, c == None, ..., n = None) и if ...

0 голосов
/ 10 апреля 2020

То, как я всегда это понимал:

Полиморфизм - это концепция, которая в основном говорит, что выглядит одинаково, но делает вещи по-разному, в зависимости от контекста.

  1. если у вас есть метод с тем же именем, который имеет другое количество аргументов, это перегрузка метода.

  2. если у вас есть метод с тем же именем с тем же количеством аргументов, но это зависит от класса, это переопределение метода.

Примечание: я говорю количество аргументов, что касается языков с динамической типизацией, тип имеет значение только во время выполнения. Например, для Java это не только количество аргументов, но и тип, конечно.

Оба являются конкретными способами борьбы с полиморфизмом. Подробно, в зависимости от языка, который вы используете, концепция может быть реализована, а иногда даже интерпретирована по-разному.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...