Python переназначить функцию во внешний файл - PullRequest
1 голос
/ 21 апреля 2020

Представьте себе, что я импортирую функцию с именем main_func() из пакета Python, которая вызывает другую функцию called_func(), определенную в том же файле пакета.

Теперь в моем личном сценарии я хочу позвонить main_func(). Но с небольшой разницей, когда я запускаю этот main_func(), я хочу, чтобы он вызывал мою лично модифицированную версию called_func(). Эта измененная версия функции определена в моем личном файле сценария.

Как я могу это сделать?

Пример:

Скрипт из пакета с именем package / functions.py

def main_func(a):
    return called_func(a)

def called_func(a):
    print(a)

Персональный скрипт

from package.functions import main_func

def called_func(a):
    # My personally modified function
    print(a, a)

main_func('Test ')

Если я запускаю свой скрипт, я получить этот вывод Test.

Однако я хотел бы получить Test Test

Примечание: Я не могу изменить файлы пакета ...

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Обратите внимание на import package.functions, а затем присвойте новое определение called_func() тому, что в модуле.

import package.functions

from package.functions import main_func

def called_func(a):
    # My personally modified function
    print(a, a)

package.functions.called_func = called_func

main_func('Test ')
1 голос
/ 21 апреля 2020

Вы можете monkey patch свою функцию в модуль

import package.functions


def called_func(a):
    # your modified function
    print(a, a)


package.functions.called_func = called_func
package.functions.main_func("Test ")

Дает

Test  Test 
...