Bin*_*hen 582 python python-import
我有一个存储所有.py文件的目录.
bin/
main.py
user.py # where class User resides
dir.py # where class Dir resides
Run Code Online (Sandbox Code Playgroud)
我想在main.py中使用user.py和dir.py中的类.
如何将这些Python类导入main.py?
此外,User如果user.py位于子目录中,如何导入类?
bin/
dir.py
main.py
usr/
user.py
Run Code Online (Sandbox Code Playgroud)
Amb*_*ber 817
在与文件__init__.py相同的目录中创建一个空文件.这将表明Python"可以从这个目录导入".
那就做......
from user import User
from dir import Dir
Run Code Online (Sandbox Code Playgroud)
如果文件位于子目录中,则同样适用 - 也将子目录放在__init__.py子目录中,然后使用带有点表示法的常规import语句.对于每个级别的目录,您需要添加到导入路径.
bin/
main.py
classes/
user.py
dir.py
Run Code Online (Sandbox Code Playgroud)
因此,如果目录名为"classes",那么你会这样做:
from classes.user import User
from classes.dir import Dir
Run Code Online (Sandbox Code Playgroud)
与上一个相同,但在模块名称前加上.if不使用子目录:
from .user import User
from .dir import Dir
Run Code Online (Sandbox Code Playgroud)
ecp*_*ecp 122
我刚学会了(感谢martineau的评论),为了从同一目录中的文件导入类,你现在可以用Python 3编写:
from .user import User
from .dir import Dir
Run Code Online (Sandbox Code Playgroud)
luc*_*rot 39
在python3,__init__.py是不再需要。如果控制台的当前目录是 python 脚本所在的目录,则一切正常
import user
Run Code Online (Sandbox Code Playgroud)
但是,如果从不包含user.py.
在这种情况下,请使用
from . import user
Run Code Online (Sandbox Code Playgroud)
即使您想从那里导入整个文件而不仅仅是一个类,这也有效。
use*_*312 36
在你的main.py:
from user import Class
Run Code Online (Sandbox Code Playgroud)
Class您要导入的类的名称在哪里.
如果要调用方法Class,可以使用以下方法调用它:
Class.method
请注意,__init__.py同一目录中应该有一个空文件.
And*_*eas 13
如果 user.py 和 dir.py 不包括类,那么
from .user import User
from .dir import Dir
Run Code Online (Sandbox Code Playgroud)
不管用。然后你应该导入为
from . import user
from . import dir
Run Code Online (Sandbox Code Playgroud)
小智 12
如果您不想将函数和类与您的函数和类混合,则可以导入模块并通过其名称进行访问
import util # imports util.py
util.clean()
util.setup(4)
Run Code Online (Sandbox Code Playgroud)
或者您可以将函数和类导入到代码中
from util import clean, setup
clean()
setup(4)
Run Code Online (Sandbox Code Playgroud)
您可以使用wildchar*将该模块中的所有内容导入到您的代码中
from util import *
clean()
setup(4)
Run Code Online (Sandbox Code Playgroud)
min*_*lyu 10
对于 Python 3+,假设您有以下结构:
A/
__init__.py
bar.py
foo.py
Run Code Online (Sandbox Code Playgroud)
在您的__init__.py文件中,您可以放置from . import foo
然后你可以在 bar 文件中导入 foo
# A/bar.py
from foo import YourClass
Run Code Online (Sandbox Code Playgroud)
这些文件的目的__init__.py是包含在遇到不同级别的包时运行的可选初始化代码。您放入的所有内容都__init__.py将在包加载期间初始化。
小智 9
为了使它更容易理解:
第1步:让我们转到一个目录,其中包含所有目录
$ cd /var/tmp
Run Code Online (Sandbox Code Playgroud)
第2步:现在让我们创建一个class1.py文件,其类名为Class1,带有一些代码
$ cat > class1.py <<\EOF
class Class1:
OKBLUE = '\033[94m'
ENDC = '\033[0m'
OK = OKBLUE + "[Class1 OK]: " + ENDC
EOF
Run Code Online (Sandbox Code Playgroud)
第3步:现在让我们创建一个class2.py文件,它的类名为Class2,带有一些代码
$ cat > class2.py <<\EOF
class Class2:
OKBLUE = '\033[94m'
ENDC = '\033[0m'
OK = OKBLUE + "[Class2 OK]: " + ENDC
EOF
Run Code Online (Sandbox Code Playgroud)
第4步:现在让我们创建一个main.py,它将执行一次,从2个不同的文件中使用Class1和Class2
$ 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
Run Code Online (Sandbox Code Playgroud)
第5步:运行程序
$ python main.py
Run Code Online (Sandbox Code Playgroud)
输出将是
[Class1 OK]:
[Class2 OK]:
Run Code Online (Sandbox Code Playgroud)
from user import User
from dir import Dir
Run Code Online (Sandbox Code Playgroud)
Python 3
一样directory。
导入文件:log.py
导入类:SampleApp()。
import log
if __name__ == "__main__":
app = log.SampleApp()
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
要么
目录是basic。
导入文件:log.py。
导入类:SampleApp()。
from basic import log
if __name__ == "__main__":
app = log.SampleApp()
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
841500 次 |
| 最近记录: |