Итак, еще один вопрос о том, что такое Pythonic! В данном случае прикладной областью являются сетевые алгоритмы (например, узлы, ребра, Dijkstra, что-то в этом роде ...), то, что я только ранее кодировал на строго типизированных языках, где мы можем быть совершенно уверены, что все .
Тем временем в Python у меня есть класс Net
; один экземпляр этого класса представляет сеть. У меня есть класс Edge
, который создается для каждого ребра в сети. Каждый экземпляр Edge
имеет, помимо прочего, уникальный id
.
Иногда я хочу удалить ребро, ссылаясь на соответствующий экземпляр Edge
. В других случаях я хочу удалить Edge, используя id
. Если честно, я начинаю забывать, какие переменные Edges
, а какие ids
. Я думаю, что я предпочел C ++ для этой работы: -P
Поэтому я предлагаю два решения:
Начните использовать системы Венгерская нотация - лучше назовите мои переменные, чтобы я знал, являются ли они действительными объектами Edge или просто идентификатором Edge, который я хочу. Реализуйте строгую типизацию - make remove_edge
(который является методом Net
) явно отклоняет все, что не является Edge
. Создайте функцию-оболочку remove_edge_id
, которая ищет соответствующий Edge
из ее id
и затем вызывает remove_edge
; эта функция также отклоняет все, что не является id
.
Используйте утку. Пусть remove_edge
проверит, является ли аргумент id
или Edge
, и просто сделайте с ним правильную вещь.
Какое время считаешь?