web-dev-qa-db-ja.com

同じディレクトリまたはサブディレクトリ内のクラスをインポートする方法

すべての .py ファイルを格納するディレクトリがあります。

bin/
   main.py
   user.py # where class User resides
   dir.py # where class Dir resides

main.py user.py dir.py のクラスを使いたい。
これらのPythonクラスを main.py にインポートするにはどうすればいいですか?
さらに、 user.py がサブディレクトリにある場合、どうやってクラスUserをインポートすることができますか?

bin/
    dir.py
    main.py
    usr/
        user.py
490
Bin Chen

Python 2

ファイルと同じディレクトリに__init__.pyという名前の空のファイルを作成します。これはPythonにとって「このディレクトリからインポートしても大丈夫」ということを意味します。

それなら….

from user import User
from dir import Dir

ファイルがサブディレクトリにある場合も同じことが言えます。サブディレクトリにも__init__.pyを入れてから、ドット表記で通常のimport文を使用します。ディレクトリの各レベルについて、インポートパスに追加する必要があります。

bin/
    main.py
    classes/
        user.py
        dir.py

そのため、ディレクトリの名前が "classes"の場合は、次のようにします。

from classes.user import User
from classes.dir import Dir

Python 3

前と同じですが、サブディレクトリを使用しない場合はモジュール名の前に.を付けます。

from .user import User
from .dir import Dir
710
Amber

同じディレクトリ内のファイルからクラスをインポートするには、Python 3で書くことを学びました( martineauのコメント のおかげで)。

from .user import User
from .dir import Dir
110
ecp

あなたのmain.pyに:

from user import Class

Classはインポートしたいクラスの名前です。

Classのメソッドを呼び出したい場合は、次のようにして呼び出すことができます。

Class.method

同じディレクトリに空の__init__.pyファイルがあるはずです。

31
user225312

関数やクラスを自分のものと混ぜたくない場合は、モジュールをインポートしてその名前からアクセスすることができます。

import util # imports util.py

util.clean()
util.setup(4)

あるいは、関数やクラスを自分のコードにインポートすることもできます。

from util import clean, setup
clean()
setup(4)

あなたはあなたのコードにそのモジュールの全てをインポートするためにwildchar *を使うことができます

from util import *
clean()
setup(4)
10
A.Zaben

理解しやすくするために、

ステップ1:すべてが含まれる1つのディレクトリに移動しましょう

$ cd /var/tmp

ステップ2:クラス名Class1を持つclass1.pyファイルをいくつかのコードで作成しましょう。

$ cat > class1.py <<\EOF
class Class1:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class1 OK]: " + ENDC
EOF

ステップ3:クラス2という名前のclass2.pyファイルをいくつかのコードで作成しましょう。

$ cat > class2.py <<\EOF
class Class2:
    OKBLUE = '\033[94m'
    ENDC = '\033[0m'
    OK = OKBLUE + "[Class2 OK]: " + ENDC
EOF

ステップ4:2つの異なるファイルからClass1とClass2を使用するために1回実行されるmain.pyを1つ作成しましょう。

$ cat > main.py <<\EOF
"""this is how we are actually calling class1.py and  from that file loading Class1"""
from class1 import Class1 
"""this is how we are actually calling class2.py and  from that file loading Class2"""
from class2 import Class2

print Class1.OK
print Class2.OK
EOF

ステップ5:プログラムを実行する

$ python main.py

出力は次のようになります。

[Class1 OK]: 
[Class2 OK]:
8
YumYumYum
from user import User 
from dir import Dir 
4
demas

Python 3


同じdirectory

インポートファイル:log.py

インポートクラス:SampleApp()

import log
if __== "__main__":
    app = log.SampleApp()
    app.mainloop()

または

ディレクトリはbasicです。

ファイルlog.pyにインポートします。

インポートクラス:SampleApp()

from basic import log
if __== "__main__":
    app = log.SampleApp()
    app.mainloop()
4

Python3では、__init__.py不要 です。コンソールの現在のディレクトリがpythonスクリプトがあるディレクトリである場合、すべてが正常に動作します

import user

ただし、user.pyを含まない別のディレクトリから呼び出された場合、これは機能しません。
その場合、使用

from . import user

これは、クラスからだけでなくファイル全体をインポートする場合でも機能します。

2
lucidbrot

手短に言えば、ファイル__init__.pyをclassesディレクトリに作成し、それを次のようにスクリプトにインポートします。

from classes.myscript import *
0
Shafiq

同じディレクトリからインポートする

from . import the_file_you_want_to_import 

サブディレクトリからインポートするには、ディレクトリに含める必要があります

init。py

あなた以外のファイル

ディレクトリからyour_fileをインポートします

0
rojo_hlerr