Как написать одноименные методы с разными параметрами в 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.