Шаблонирование и расширение модуля python а-ля функторов / параметров c модулей - PullRequest
0 голосов
/ 10 апреля 2020

Я не совсем уверен, как именно это описать, но представьте, что у вас есть 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, но он не выглядит очень "чистым"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...