我需要调用一个函数,从一个python类到另一个python类,它们位于不同的目录中。 我正在使用Eclipse和PyDev开发脚本。
sample.py
class Employee:
def meth1(self,arg):
self.arg=arg
print(arg)
ob=Employee()
ob.meth1("world")
main.py
class main:
def meth(self,arg):
self.arg=arg
print(arg)
obj1=main()
obj1.meth("hello")
我需要在 main.py
中访问 meth1更新代码
main.py
from samp.sample import Employee
class main:
def meth(self,arg):
self.arg=arg
print(arg)
obj1=main()
obj1.meth("hello")
执行 main.py 后,它会自动打印“world”而不会调用它。
我的要求是我需要从 main.py 明确调用 meth1
请在下面找到我的文件夹
答案 0 :(得分:0)
import
是您需要的概念。 main.py
需要import sample
,然后访问该模块中定义的符号,例如sample.Employee
为了确保在导入时可以找到sample.py
,其父目录的路径可以附加到sys.path
(要获得对它的访问权限,当然,您首先需要{{} 1}})。要操纵路径(例如,将像import sys
这样的相对路径转换为绝对路径,您可能也需要'../samp'
并查看子模块{{1}的标准库函数必须提供。
答案 1 :(得分:-1)
您必须将sample.py文件作为模块导入main.py文件。由于文件位于不同的目录中,因此您需要使用__init__.py
来自文档:
需要
__init__.py
个文件才能使Python将目录视为包含包;这样做是为了防止具有通用名称的目录(例如字符串)无意中隐藏稍后在模块搜索路径上发生的有效模块。在最简单的情况下,__init__.py
可以只是一个空文件,但它也可以执行包的初始化代码或设置__all__
变量,稍后将对此进行描述。
这是一个related stack overflow question,它更详细地解释了解决方案。
答案 2 :(得分:-1)
改变sys.path
变量通常不是一个好主意。这可以使脚本不可移植。更好的方法是将额外的模块放在用户站点目录中。您可以使用以下脚本找出它是什么。
import os
import sys
import site
print(os.path.join(site.USER_BASE, "lib", "python{}.{}".format(*sys.version_info[0:2]), "site-packages"))
将模块放在那里。然后你可以像任何其他模块一样导入。
import sample
emp = sample.Employee()
稍后您可以使用distutils
或setuptools
对其进行打包,导入仍然可以正常运行。