本文目录一览:
python怎么引入别的包的类
用 from import
,例如:
有一个模块 a.py
,在 a.py
中有一个 names
的类
# a.py
class names(object):
def __init__(self):
self.name = "zhangsan"
# b.py 在b.py中实例化a.py中的 names 类
from a import names
names() # 直接调用就好了
或者使用 import a
import a
a.names() # 这样调用
python 怎么引用其他文件的类
在导入文件的时候,Python只搜索当前脚本所在的目录,加载(entry-point)入口脚本运行目录和 sys.path
中包含的路径例如包的安装地址。所以如果要在当前脚本引用其他文件,除了将文件放在和脚本同一目录下,还有以下几种方法:
- 将文件所在位置添加到
sys.path
中
import sys
sys.path.insert(0, '/path/to/application/app/folder') # or sys.path.append('/path/to/application/app/folder')
import file
- 在文件目录下新建
__init__.py
文件然后调用文件
from application.app.folder.file import func_name
__init__.py
文件
__init__.py
文件的作用
该文件的主要作用是初始化 Python 包。如果目录下面包含了该文件,Python 解释器就会将该目录当做一个包,下一步就可以使用 import
语句在别的 .py
脚本中引用该目录下的文件。一个标准 Python 模块的结构如下所示:
package/
__init__.py
file.py
file2.py
subpackage/
__init__.py
submodule1.py
submodule2.py
__init__.py
文件可以为空但可以用来建立对包的需求。一般来说会在该文件中写那些类、函数等需要被导入到包水平,从而可以被方便的引用。比如:如果 file.py
文件中有一个 File
类,在 __init__.py
文件中啥都没写时引用 File
类需要这样操作:
from package.file import File
如果在 __init__.py
文件中将 file
导入包,那就在包水平可以直接引用 File
类:
# in your __init__.py
from file import File
# in your script
from package import File
此外,还需要注意的一点是 __init__.py
文件中的 __all__
变量。如果解释器在 __init__.py
文件中观察到了 __all__
变量,那么在运行 from package import *
时就只会引入 __all__
变量中列出的那些模块。例如:如果想在上述结构的只引入 submodule1
模块,那么可以在 subpackage/__init__.py
文件中定义:
__all__ = ['submodule1']
当引用 subpackage
时 from subpackage import *
就只引入了 submodule1
模块。
3. 将文件所在目录添加到 Python 的环境变量
export PYTHONPATH=$HOME/pathToYourScripts/:$PYTHONPATH
在 vs 上怎么用 python 将一个程序引入另一个程序
Python 中调用另一个程序有多种不同方式,一种是调用本文件下的某个函数来实现调用,另一种是调用模块或包文件下的函数实现调用,还有一种是通过类方法的方式调用类定义的某段程序。
自身函数的调用相当方便的,在定义好了函数以后直接按定义的格式调用即可,出现的错误为参数数量不匹配。通过包或模块调用相对自身函数调用比较复杂,需要提前导入包或模块,常用的方法为 import
或者 from import
,导入成功的前提是对应的包或模块在 Python 路径之下,可以通过 sys.path
(sys
为系统内置模块可以直接使用 import sys
导入)来查看 Python 路径。以导入第三方包文件 requests
为例。通过类方法的调用需要在调用之前,实例化一个类对象,通过这个类对象来调用类方法,注意第三个方法为私有方法,不允许类外部访问。
python外部包使用说明方式导入?
除了让包内导入更加显式,这个功能的一部分设计初衷是,为了帮助脚本解决同名文件出现在模块搜索路径上多个不同位置时的二义性。考虑包目录,这定义了一个名为 mypkg
的包,其中含有名为 mypkg.main
和 mypkg.string
的模块。现在,假设模块 main
试图导入名为 string
的模块。在 Python 2.X 和更早版本中,Python 会先寻找 mypkg
目录以执行相对导入。这会找到并导入位于该处的 string.py
文件,将其赋值给 mypkg.main
模块命名空间内的名称 string
。不过,这一导入的本意可能是要导入 Python 标准库的 string
模块。可惜的是,在这些 Python 版本中,无法直接忽略 mypkg.string
去寻找位于模块搜索路径更右侧的标准库中的 string
模块。此外,我们无法使用完整包导入路径来解决这个问题,因为我们无法依赖在每台机器上的标准链接库路径。换句话说,包中的简单导入可能具有二义性而且容易出错。一种可能的后果是,一个局部的模块或包会在不经意间隐藏了 sys.path
上的另一个模块。在实践中,Python 使用者可以避免为他们自己的模块重复使用标准库模块的名称(如果需要标准 string
库,就不要把新的模块命名为 string
)。但是,一个包还是有可能意外地隐藏标准库模块。再者,Python 以后可能新增标准库模块,而其名称可能刚好就和自己的一个模块同名。而依赖于没有点号开头相对导入的程序代码同样也不容易理解,因为读者可能对希望使用哪个模块而感到困惑。所以我们最好能在代码中显式地指出导入的解析过程。