Переопределение «скомпилированного оператора» в python - PullRequest
2 голосов
/ 19 июля 2011

В качестве аргумента, скажем, я хотел создать свой собственный модуль с именем типа math (которое уже предопределено), а затем импортировать его из другого модуля. Вот структура каталогов моего кода:

__init__.py
math.py

Так что в __init__.py я хочу сделать как

from math import whatever

Если я запускаю __init__.py, вместо математического модуля, который я включил, будет выбрана встроенная математика, но я хочу получить доступ к своему математическому модулю. Единственный способ обойти это - просто переименовать math.py во что-то другое, например mymath.py. Как я могу сделать это, сохранив оригинальное название модуля?

Ответы [ 3 ]

3 голосов
/ 19 июля 2011

Прежде всего, это плохая идея называть ваш модуль тем же именем, что и модули stdlib. Возможно, вы не знаете, когда вам придется столкнуться с неожиданными результатами.

Во-вторых, то, что вы говорите, вполне возможно.

  1. Создать каталог по имени foo.
  2. Создайте __init__.py с содержанием, которое вы упомянули.
  3. Создать math.py с таким содержимым, как print "something"
  4. Если вы сделаете python __init__.py, вы захотите, чтобы что-то было напечатано.

Возможно, вы делаете что-то еще?

2 голосов
/ 19 июля 2011

Как правило, он заменяет модули по умолчанию - вы не знаете побочных эффектов.Я думаю, что я должен сначала рекомендовать вам поместить его в какую-то подпапку (если она находится в папке «my», вы можете просто import my.math as math), после этого я предлагаю переименовать ее.затем убедитесь, что путь к math.py указан первым в sys.path.Вы могли бы, вероятно, просто сделать:

import sys, os
sys.path.insert(0,os.getcwd())
1 голос
/ 19 июля 2011

если ваш пакет называется testpack, вы можете сделать:

testpack / myfile.py

import math
from testpack import math as mymath

print (math.sin(3))
print (mymath.hello())

где testpack / math.py is:

def hello():
    print ('this is math')

это дает вам:

0.14112000806
this is math

, поэтому вы можете использовать оба математических модуля

Редактировать : Обновлено для python 3.x
Примечание : структура папки:

mypackages\
  __ini__.py
  ..........
  ..........
  testpack\
      __init__.py
      math.py
      myfile.py
...