Уведомления

Группа в Telegram: @pythonsu

#1 Март 23, 2016 13:12:22

Romb
Зарегистрирован: 2016-02-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

как сделать что то на подобии пользовательского типа

привет!
Я совсем новичок, вопросы у меня очень глупые.
Мне нужно что то на подобии пользовательского типа, передаваемого в функцию.

def my_func(day_of_week: monday):

мне нужно что бы я мог использовать именно дни недели.
day_of_week : mondey, sunday, …

Был бы очень благодарен если дадите ссылку на примеры практической реализации приложений, что бы понять как пишутся реальные сценарии.

Спасибо!

Отредактировано Romb (Март 23, 2016 13:16:31)

Офлайн

#2 Март 23, 2016 14:29:42

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

как сделать что то на подобии пользовательского типа

Romb
мне нужно что бы я мог использовать именно дни недели.
В питоне нет никаких ограничений на передачу значения в функцию. То, что вы хотите в пионе сделать невозможно ввиду отсутствия этапа компиляции.



Офлайн

#3 Март 23, 2016 16:02:25

Romb
Зарегистрирован: 2016-02-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

как сделать что то на подобии пользовательского типа

Спасибо за ответ.
Если я хочу использовать как аргумент функции переменную которая может быть только, например “YES” или “NO”. Мне сделать проверку в этой функции и выводить ошибку если ввили не правильное значение? А если я хочу использовать такие аргументы во многих функциях, мне прийдется эту проверку делать во всех местах. Могу ли я как то сделать что бы не копировать проверку каждый раз туда где мне нужно применить это условие.

Отредактировано Romb (Март 23, 2016 16:03:45)

Офлайн

#4 Март 23, 2016 16:14:34

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

как сделать что то на подобии пользовательского типа

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



Офлайн

#5 Март 23, 2016 16:15:36

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

как сделать что то на подобии пользовательского типа

ну так создайте функцию для проверки chek(data)

а далее используете ее внутри ваших конструкций
if check(data):
ololo…



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Март 23, 2016 17:40:55

Romb
Зарегистрирован: 2016-02-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

как сделать что то на подобии пользовательского типа

Спасибо за ответ.
Как то не очень удобно получается.
Нельзя сделать как встроенный тип данных?

Офлайн

#7 Март 23, 2016 18:30:34

alex925
Зарегистрирован: 2015-01-08
Сообщения: 204
Репутация: +  14  -
Профиль   Отправить e-mail  

как сделать что то на подобии пользовательского типа

Romb
Свой тип ты можешь создать, пишешь класс это будет твои тип данных. Просто соль в том, что ты не можешь ограничить тип данных поступающих в функцию, потому что python язык с динамической типизацией и типы тут не проверяются. Тут применяется принцип утиной типизации:

Если это выглядит как утка, плавает как утка и крякает как утка, то это возможно и есть утка.

Не надо пытаться перенести принципы других языков в Python, лучше больше почитай о динамической типизации и как с ней работать.

Вообще если уж совсем неймется, то обрати внимание на модуль enum из стандартной библиотеки, это не аналог того, что есть в языках со статической типизацией, но он реализует общий привычный интерфейс.

Отредактировано alex925 (Март 23, 2016 18:32:14)

Офлайн

#8 Март 23, 2016 18:32:01

Romb
Зарегистрирован: 2016-02-25
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

как сделать что то на подобии пользовательского типа

Спасибо за ответ.

Офлайн

#9 Март 23, 2016 20:33:59

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

как сделать что то на подобии пользовательского типа

Romb
Могу ли я как то сделать что бы не копировать проверку
Нет не можете. Причем не только на питоне а и на любом языке. Если там не будет никаких признаков, то как вы отличите функцию в которой нужна проверка от функции в которой она не нужна?

Можно упростить запись. Посмотрите как делают декораторы.



Офлайн

#10 Март 24, 2016 23:19:25

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

как сделать что то на подобии пользовательского типа

Вот кстати у Саммерфилда в книге “Питон на практике” в примере с параметризированным декоратором то, что нужно автору.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version