Клонировать модуль и внести изменения в копию - PullRequest
6 голосов
/ 20 сентября 2011

Можно ли скопировать модуль, а затем внести изменения в копию?Иными словами, могу ли я наследовать от модуля, а затем переопределить или изменить его части?

Ответы [ 2 ]

3 голосов
/ 20 сентября 2011

Чтобы сформулировать по-другому, можно ли наследовать от модуля, а затем переопределить или изменить его части?

Да.

import module

Вы можете использоватьвещи из module или переопределить вещи в вашем скрипте.

Вы также можете сделать это для создания «производного» модуля.

Вызовите этот «module_2».

from module import *

Который импортирует все.Затем вы можете использовать вещи из module или переопределить вещи в этом новом модуле, «module_2».

Другие скрипты могут затем делать

import module_2

И получать все вещи из модуля, модифицированногопереопределения в module_2.

0 голосов
/ 20 сентября 2011

Пространство имен модуля Python доступно для записи.Обратите внимание:

# contrived.py
CONST = 100
def foo():
    return CONST

Вы можете изменить значение CONST после его импорта:

import contrived
contrived.CONST = 200
contrived.foo() # 200

Однако, только один экземпляр модуля может быть импортирован, поэтому нетВ любом случае создать клон и продолжить использовать оригинальный модуль.Если вам не нужен доступ к исходному модулю, то довольно просто создать модуль-обертку и переопределить все, что вы хотите изменить.

Одна вещь, на которую стоит обратить внимание, это то, что подобный код не будетработать как вы ожидаете:

# clone.py
from contrived import *
CONST = 200

Это фактически назначит CONST в пространстве имен clone, функции, импортированные из contrived, будут продолжать ссылаться на CONST в пространстве имен contrive:

import clone
clone.foo() # 100

В этом случае вы можете сделать что-то вроде этого:

# clone.py
import contrived
contrived.CONST = 200
from contrived import *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...