Полиморфная рассылка примитивных типов в питоне?

1

В perl я обычно реализую полиморфный ввод следующим образом:

sub inputanything {
   return undef unless (length($_[0])) ;
   return(&handlehash(@_)) if (ref($_[0]) eq 'HASH');
   return(&handlearray(@_)) if (ref($_[0]) eq 'ARRAY');
   return(&handlescalar(@_)) if (ref($_[0]) eq 'SCALAR');
   return(&handleobject(@_)) if (ref($_[0]) eq 'Foo') ;
   return undef ; 
} 

Пример приблизительно: "Пропущенное значение должно иметь длину независимо от типа, запускать соответствующий обработчик типа на основе обнаруженного типа, ничего не возвращать, если мы ничего не передаем или нам передан тип, который мы не узнаем".

Я пытаюсь сделать что-то подобное a в объекте python, которое может получить None, string, integer, float и decimal. Существует ли метод python для универсального обнаружения существования каких-либо данных в значении неизвестного типа? Если нет, существует ли кононический способ отправки на основе примитивных типов в python, и можете ли вы отнести меня к примеру?

python 3.5.3 Спасибо заранее!

Теги:
python-3.x

1 ответ

0
Лучший ответ

Это еще проще в python.

"Пропущенное значение должно иметь длину независимо от типа, запускать соответствующий обработчик типа на основе обнаруженного типа, ничего не возвращать, если мы ничего не передаем или нам передан тип, который мы не узнаем".

Если я правильно понял, вы хотите распознать "независимо от типа": пустые строки, массивы, хэш-карты, все.

Вы уже можете сделать:

if your_variable:
    .. code for non-empty data

Он будет работать практически для всех builtin- и типов, определенных библиотекой.

Как это работает и как вы можете расширить его для своих типов?

Прочтите https://docs.python.org/3/reference/datamodel.html#object. BOOL

Да. Это так просто.

Просто определите метод __bool__ для вашего типа.

(Радуйся! Python - правильный выбор после perl! Я знаю это сам)

  • 0
    Я хочу распознать непустые значения любого типа, а затем запустить функции для обработки определенного типа, который был предоставлен.
  • 1
    Вы получите бесплатно непустые чеки почти для всего, кроме прямых потомков от object и тому подобное. В случае, если длина достаточно - вы можете проверить \__len__ ваших типов. Читать Data Model .
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню