Как написать одноименные методы с разными параметрами в python [duplicate]

На этот вопрос уже есть ответ:

Как работает полиморфизм в Python? 3 ответа Перегрузка функции Python 13 ответов

Я изучаю Python (3.x) на фоне Java.

У меня есть программа на Python, в которой я создаю personObject и добавляю его в список.

p = Person("John")
list.addPerson(p)

Но для гибкости я также хочу иметь возможность объявить это непосредственно в методе addPerson, например так:

list.addPerson("John")

Метод addPerson сможет определить, отправляю ли я объект Person или String.

В Java я бы создал два отдельных метода, например:

void addPerson(Person p) {
    //Add person to list
}

void addPerson(String personName) {
    //Create Person object
    //Add person to list
}

Я не могу узнать, как это сделать в Python. Я знаю функцию type (), которую я мог бы использовать, чтобы проверить, является ли параметр строкой или объектом. Тем не менее, это кажется мне грязным. Есть ли другой способ сделать это?

РЕДАКТИРОВАТЬ

Я думаю, что альтернативный обходной путь будет что-то вроде этого (python):

def addPerson(self, person):
    //check if person is string
        //Create person object

    //Check that person is a Person instance
        //Do nothing

    //Add person to list

Но это кажется грязным по сравнению с решением по перегрузке в Java.

Ответы на вопрос(2)

Ваш ответ на вопрос