Como escrever métodos de mesmo nome com parâmetros diferentes em python [duplicado]

Esta pergunta já tem uma resposta aqui:

Como o polimorfismo funciona em Python? 3 respostasobrecarga da função Python 3 respostas

Estou aprendendo Python (3.x) com experiência em Jav

Tenho um programa python em que crio um personObject e o adiciono a uma list

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

Mas por flexibilidade, também quero poder declará-lo diretamente no método addPerson, assim:

list.addPerson("John")

O método addPerson poderá diferenciar se estou enviando ou não um objeto-pessoa ou uma strin

Em Java, eu criaria dois métodos separados, como este:

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

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

Não consigo descobrir como fazer isso em Python. Eu sei de uma função type (), que eu poderia usar para verificar se o parâmetro é ou não uma String ou um Objeto. No entanto, isso me parece confuso. Existe outra maneira de fazer isso?

EDITAR

Acho que a solução alternativa seria algo parecido com isto (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

as parece confuso comparado à solução de sobrecarga em Jav

questionAnswers(2)

yourAnswerToTheQuestion