Ваш анализ верен - задание в третьей строке, которое вы показали, полностью скрывает первые две.
Это верно в простом случае, однако бывают случаи, когда этого не происходит.Возьмем, к примеру, этот файл SWIG:
%module test
%pythonprepend %{
#hello world
%}
void foo();
Здесь определение Python foo()
не скрывается, как в вашем примере, потому что в сгенерированной функции есть дополнительный код Python.(Даже если это просто комментарий).
Я думаю, что причина, по которой определение всегда выбрасывается, а не просто когда это необходимо, вероятно, историческая, хотя я не могу найти точный пример из быстрого просмотра.SWIG поддерживает генерацию кода Python разными способами для множества разных версий Python.(См., Например, код, сгенерированный -builtin
, или вывод -python -help
, чтобы получить некоторое представление о величине вариаций. Так что, вероятно, либо эти назначения когда-то были внутри теста времени выполнения, который был удален, когда он был отменен, и / илиэто похмелье из далекого прошлого.
Даже в современном случае, хотя определение метода, видимого в файле .py, все же имеет одно существенное преимущество, заключающееся в том, что IDE может выполнять такие вещи, как подсчетаргументы, прочитайте их имена, строку документа и т. д. еще.