Cómo escribir métodos con el mismo nombre con diferentes parámetros en python [duplicado]

Esta pregunta ya tiene una respuesta aquí:

¿Cómo funciona el polimorfismo en Python? 3 respuestasPython función de sobrecarga 13 respuestas

Estoy aprendiendo Python (3.x) de un fondo Java.

Tengo un programa de Python donde creo un personObject y lo agrego a una lista.

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

Pero por flexibilidad, también quiero poder declararlo directamente en el método addPerson, así:

list.addPerson("John")

El método addPerson podrá diferenciar si envío o no un Person-object o un String.

En Java crearía dos métodos separados, como este:

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

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

No puedo averiguar cómo hacer esto en Python. Sé de una función type (), que podría usar para verificar si el parámetro es una Cadena o un Objeto. Sin embargo, eso me parece desordenado. ¿Hay otra forma de hacerlo?

EDITAR

Supongo que la solución alternativa sería algo como esto (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

Pero parece desordenado en comparación con la solución de sobrecarga en Java.

Respuestas a la pregunta(2)

Su respuesta a la pregunta