Найти - Пользователи
Полная версия: как перегрузить функцию из импортированого модуля?
Начало » Python для новичков » как перегрузить функцию из импортированого модуля?
1
AD0DE412
эээ … в общем есть билиотека в ней несколько переменных, классов и функций что то вроде
...
def main():
code

if __name__ == '__main__':
main()

в функции main() весь модуль соберается (этот модуль так то это консольная программа, просто я хочу использовать ее как модуль в своем скрипте) и происходит нужная магия.
мне нужно немного изменить ее работу, после импорта или импортировать модуль с исключение этой функции. как это сделать?
doza_and
AD0DE412
эээ …
Постарайтесь внятно изложить что вам нужно.

AD0DE412
изменить ее работу, после импорта или импортировать модуль с исключение этой функции. как это сделать?
А кто вас заставляет импортировать функцию main? Вызываться она у вас при импорте не будет. По идее можно сделать почти что угодно, но только зачем? Если нужна разная инициализация то

 if __name__ == '__main__':
    main()
else:
    other_main()
ни разу не встречался с тем чтобы так надо было делать. Это у вас наверное ошибка проектирования программы.
AD0DE412
спасибо за ответ
в общем вопрос в следуещем
есть просто импорт всего модуля при помощи import module
есть импорт имен из модуля from module import name или
from module import *
итд
а можно подключить модуль с исключением некоторых имен
т.е. звездачка (*) в конструкции from module import * означает импортировать все имена,
возможно ли использовать другую конструкцию дающую в резульнате импорт всех имен за исключением некоторых имен что то вроде
from module import * (плюс что то исключающее определенное имя)
FishHook
AD0DE412
По-настоящему приватных членов в питоне нет вообще, если захотеть, то дотянуться можно до чего угодно. Тут вопрос, зачем вам такие ограничения понадобились? Если вы просто хотите скрыть детали реализации, чтобы пользователь вашего модуля случайно не вызвал служебный метод, то есть правило одного подчеркивания
_a = 10
def _fn():
pass
такие сущности считаются приватными и по дефолту не импортитуются и не подсвечиваются ИДЕшками.
А вообще, организуйте свои модули в пакеты, на уровне пакета есть __init__ файл, в нем можете конретизировать, что конкретно вы хотите выставить наружу пакета.
Rodegast
А ещё есть можно сделать список __all__ всё что туда записать будет импортироваться через from … import * а то что туда не записано, не будет.
AD0DE412
понятно либо все, либо то что укажишь. ясно.
doza_and
AD0DE412
ясно.

Нет вам неясно.
FishHook
дотянуться можно до чего угодно.
если не нужен символ можете del сделать.
AD0DE412

doza_and
Нет вам неясно.
и?
з.ы. я понимаю можно накрутить всякого, хитрого но все в конечном итоге сводится к либо все, либо то что укажишь. если это не так, то как?
Rafik
AD0DE412
з.ы. я понимаю можно накрутить всякого, хитрого но все в конечном итоге сводится к либо все, либо то что укажишь. если это не так, то как?
Для “простого” использования всё верно: или всё, или что указано. Однако, если кто-то захочет, то может через всякие хитроумные финты ушами дотянуться до того, что не указано. Но это уже его, дотянувшегося, проблемы, не твои, если что-то переделаешь в своём классе, в приватном методе, и он будет работать не совсем так, как работал в первоначальной версии.
FishHook
AD0DE412
и?
Вам намекают, что неплохо бы разобраться, что вообще означает импорт в питоне, что при этом происходит, тогда и понимание процесса появится. Во многих языках программирования, да в принципе во всех современных есть конструкция импорта, но все языки устроены по-разному, и импорт в них работает по-разному, в голанге не так как в питоне, в джаве не так как в JS. Вот никак нельзя в питоне извлечь из модуля какую-то одну сущность, не прочитав и не выполнив модуль целиком и не создав в пространстве модуля все остальные сущности. И пока вы не прочитаете соответствующий раздел документации и не уложите в своей голове, как работает импорт модулей, то ничего вам не понятно.

AD0DE412
укажишь
не делайте так больше, ладно?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB