Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функции с разными типами параметров 
:(
    Опции темы
ecspertiza
Дата 22.10.2011, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: нет
Всего: 5



В питоне еще не силен, пытаюсь найти как определить допустим две ф-ции с одним именем ,но с разными типами параметров, объясню на примере (C++) если никто не против smile

допустим хочу определить ф-цию loadUserInfo() , могу сделать загрузку информации о пользователе по id или по его имени, стало быть в плюсах я написал так бы

Код


void loadUserInfo(int user_id){
блаблабла
}

void loadUserInfo(string user_id){
блаблабла
}



и стало быть при вызове ф-ции loadUserInfoв зависимости от типа параметра будет вызываться или первая ф-ция или вторая. Вопрос как это можно реализовать в питоне

нашел такой способ

Код

def loadUserInfo(user)
   if type(user) == 'int'
      loadInfoFromId()
   elif type(user) == 'string'
      loadInfoFromName()


но может можно элегантнее ?


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
Gunjy
Дата 22.10.2011, 20:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 16.5.2009

Репутация: нет
Всего: нет



Ну можно вынести проверку типа за пределы функции, то есть:

Код

def loadInfoFromId(user):
   pass

def loadInfoFromName(user):
   pass

if type(user) == int:
   loadInfoFromId(user)
elif type(user) == str:
   loadInfoFromName(user)


А вообще, насколько мне известно две функции с одинаковым именем в Python создать нельзя,
точнее при создании второй функции с таким же именем как и первая, вы просто переопределите первую функцию.

Это сообщение отредактировал(а) Gunjy - 22.10.2011, 20:18
PM   Вверх
Backward
Дата 23.10.2011, 03:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 5.6.2007

Репутация: 2
Всего: 2



Можно воспользоваться этим рецептом
PM MAIL   Вверх
cutwater
Дата 23.10.2011, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 592
Регистрация: 24.6.2008

Репутация: 1
Всего: 10



Backward, можно, но это будет unpythonic.

ecspertiza, Если Вам нужна перегрузка ф-ций в python, значит вы делаете что-то не так.
Попробуйте конкретизировать задачу.

Исходя из Вашего кода, я бы предложил следующий вариант

Код

def load_info_from_id(id): # Use PEP8
   pass
def load_info_from_name(name):   pass

def load_user_info(id=None, name=None):
    assert id is not None and name id is not None

    if id is not None:
        load_info_from_id(id)
    elif name is not None:
        load_info_from_name(name)


Хотя это тоже не лучший вариант, вам стоит пересмотреть подход к проектированию интерфейсов, перегрузка зачастую не нужна в python.
    


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0706 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.