2016-04-19 38 views
0

ファイルcommon.pycopyPasteAnywhereTest.pyファイルにインポートしました。 common.pyには、現在のファイルから呼び出す必要があるいくつかの一般的な関数が定義されています。 copyPasteAnywhereTest.py。しかし、私が両方のファイルで定義した特定の関数copyText()があります。デフォルトではからcommon.pyが呼び出されています。インポートしたファイルで定義したものではなく、ローカルで定義した関数を呼び出す必要があります。これは私がimport commonまたはfrom common import functionNamePython:インポートされたモジュールに同じ名前の関数がある場合にローカル関数を呼び出す

を使用してインポートするかどうか common.pyから copyPasteAnywhereTest.py

#copyPasteAnywhereTest.py 

import os 
import sys 

sys.path.append(os.path.abspath("../z_common/")) 

import common 

def main(): 
    #some code 
    copyText() #Calling the copyText() function 

def copyText(): 
    #Code here. 

copyText()が呼び出されたスクリプトファイルです

これは一つのファイルcommon.py

#common.py 

def copyText(): 
    #Function definition 

#Some more functions defined in this file. 

:以下のコードは、のようなものです

最も簡単な解決策は、 copyText()の名前はcopyPasteAnywhereTest.pyにあり、同じものを呼び出します。しかし、私は適切な解決法を知りたいのであり、回避策ではありません。

だけ明確にするために、私はfrom module import function構文を使用している間にもcopyPasteAnywhereTest.pycopyText()機能(すなわち、from common import copyText)以前の輸入had't。私はちょうどfrom common import *functionName*を使用して必要な機能をインポートしました。

P.S. - 私はPythonにはかなり新しいです。質問が愚かなものかどうか気にしないでください。私はインターネットでグーグルと検索を試みましたが、答えを見つけることができませんでした。したがって、質問。

+0

@BlackBear:私はそれを使用して特定のものにしました。私は 'copyText()'をインポートしたくありませんでした。ありがとう。あなたのことを覚えておいてください。 –

+2

これは再現できません。あなたの問題を示す簡単な[mcve]を投稿してください。 –

+0

'from common import functionName'は** functionNameだけをインポートします**他の名前は' common'モジュールからインポートしません。特に、 'common'から' copyText'をインポートしません。そしてあなたが 'common import copyText'を持っていてスクリプトの後ろに' def copyText(): 'がある場合、' copyText'という名前はあなたのローカル関数にバインドされます。しかし、 'def copyText():' _before_を 'common import copyText'から行うと(あなたはすべきではありません)、' copyText'という名前は 'common'からインポートされた関数にバインドされます。 –

答えて

2

むしろこのようにインポートするよりも:

result = common.copyText()

from common import copyText

import common

とモジュール名とドットを使用してコードプレフィックスそれでやります

モジュールだけをインポートし、その内容をドット表記で参照すると、モジュールのネームスペースでこれらの名前の衝突を防ぐことができます。

+0

ありがとうございます。それを覚えておいてください。限り、私の問題の解決策が懸念されています。私は当初は 'import common'のみを使用していました。それはうまくいかず、私はそれを 'common import * functionName *'に変更しました。私はもう一度試しました(確かに)、それは私にとってはうまくいかなかったのです。私は 'common.copyText()'を呼びたくはありません。 'this.copyText()'のようなものがありますか? –

+2

問題を再現できるように[mcve]を質問に追加してください。 – snakecharmerb

+0

@MayankChoudhary: 'import common'だけでインポートすると、commonの' copyTest'は現在のモジュールで定義されているものを上書きしないので、 'copyText'をこのために使うことができ、' common.copyText'を1つは「共通」である。 – zondo

関連する問題