从一个python类调用一个函数到另一个python类,它们位于不同的目录中

时间:2014-12-24 04:56:26

标签: python eclipse pydev

我需要调用一个函数,从一个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

请在下面找到我的文件夹 Eclipse folder hierarchy

3 个答案:

答案 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()

稍后您可以使用distutilssetuptools对其进行打包,导入仍然可以正常运行。