質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

3回答

4775閲覧

同じ関数名の関数を別ファイルから呼び出す方法について

shirai

総合スコア1290

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/06/20 05:26

編集2019/06/20 05:27

前提・実現したいこと

同ディレクトリ内にa1というディレクトリとa2というディレクトリがあり、
配下にそれぞれb1.pyとb2.pyがあります。


├─a1
│ └b1.py
└─a2
□ └b2.py

b1.pyとb2.pyでは同じ名前の関数が作られています。

Python3

1# b1.py 2 3def func(a,b,c): 4 ... 5 6if __name__ == '__main__': 7 ... 8 func(a,b,c)

Python3

1# b2.py 2 3def func(a,b,c): 4 ... 5 6if __name__ == '__main__': 7 ... 8 func(a,b,c)

似せて作られた2つのfuncはそれぞれ別の処理を行っています。
業務上他のファイルとも密に絡んでいて、関数名を変えることはできません。

発生している問題

b1.pyのfuncでb2.pyのfunc関数を呼び出す必要が出てきました。
ググって試して見ましたがうまく動きません。
b1.pyに記載すべきimport文と呼び出し方をご教授いただけないでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

as

python

1# b1.py 2from a2.b2 import func as func_a2_b2

などの別の名前に束縛します。


https://docs.python.org/ja/3/tutorial/modules.html#executing-modules-as-scripts
のアンカーのちょっと上です。

投稿2019/06/20 06:17

編集2019/06/20 06:30
quickquip

総合スコア11299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

呼び出し元のソースに次のようにすれば良いかと。

python

1import b1 2import b2 3 4#b1のfuncを呼び出す場合 5b1.func(a,b,c) 6 7#b2のfuncを呼び出す場合 8b2.func(a,b,c)

投稿2019/06/20 06:09

waku_nagoya

総合スコア200

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

パッケージとうい概念を理解していませんでした。

Python

1sys.path.append(os.path.join(os.path.dirname(__file__), '..')) 2from a2.b2 import func as b2_func

これでうまくいきました。
ご回答いただきましたお二方ありがとうございました。

投稿2019/06/20 08:43

shirai

総合スコア1290

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

LouiS0616

2019/06/20 08:54

この方法で解決したのであれば、quiquiさんの回答をBAにするのが順当に思います。
quickquip

2019/06/21 00:50 編集

この場合sys.pathをいじるのはよくなくて(書籍のサンプルのような、ディレクトリ構造をプログラムの外の要因で決めないといけない場合は除く)、a1, a2があるディレクトリをカレントにして python -m a1.b1 で実行するのがいいですね。 https://docs.python.org/ja/3/using/cmdline.html#cmdoption-m Pythonでは、実行するファイルをプロジェクトのサブディレクトリに置くのは微妙です。
shirai

2019/06/24 15:25

かしこまりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問