Я не совсем уверен, как именно это описать, но представьте, что у вас есть python модуль A, со многими взаимосвязанными классами / объектами и такими, которые ссылаются друг на друга. Я хочу создать новый модуль B, который переопределяет определенные методы / классы в A. И если B что-то перезаписывает, то остальная часть B (расширение A) должна использовать новую версию из B.
ie B функционально является git ответвлением A. Но я хочу избежать обслуживания поддержки вилок в синхронизации c с A.
Существуют ли какие-либо очевидные шаблоны проектирования или pythoni c тонкостей, которые ' Позволь мне сделать это? Самый близкий, который я нашел на SO, это Как мне расширить модуль python? Добавление новой функциональности к пакету `python -twitter`
Но это терпит неудачу в том, что если модуль A имеет взаимосвязанные классы, то мы снова в ситуации, тогда« расширенный A »все равно попытается использовать другие модули в A вместо значения по умолчанию, чтобы проверить, есть ли у B его первым.
Например:
# Module A
def foo():
return bar()
def bar():
return 1
# Module B
from A import *
def bar():
return 2
>>> import B
>>> B.foo()
1
>>> B.bar()
2
>>>
Но я хочу, чтобы B.foo () return 1, т.е. вызов B.foo () будет выполнять A.foo (), но я хочу, чтобы A.foo () вместо этого выполнялся в пространстве имен B, прежде чем пытаться самостоятельно.
Как я хочу написать функтор из модуля A в модуль B
Я нашел это https://gist.github.com/jcrist/39db5994c71511572846, но он не выглядит очень "чистым"