2014-12-24 5 views
0

다른 파이썬 클래스에서 다른 디렉토리에있는 함수로 함수를 호출해야합니다. 스크립트를 개발할 때 Eclipse와 PyDev를 사용하고 있습니다.하나의 파이썬 클래스에서 다른 디렉토리에있는 함수를 호출하십시오.

sample.py

class Employee: 
def meth1(self,arg): 
     self.arg=arg 
     print(arg) 

ob=Employee() 
ob.meth1("world") 

main.py

내가 main.py

업데이트 된 코드에 meth1에 접근 할 필요가

class main: def meth(self,arg): self.arg=arg print(arg) obj1=main() obj1.meth("hello") 

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을 실행 한 후이를 호출하지 않고 "세계"를 자동으로 인쇄합니다.

내 요구 사항은 당신이로 sample.py 파일을 가져해야합니다 Eclipse folder hierarchy

답변

-1

아래에있는 내 폴더를 찾을하시기 바랍니다 meth1 명시 적으로

main.py 에서 호출 할 필요가있다 모듈을 main.py 파일에 추가하십시오. 파일이 다른 디렉토리에 있기 때문에, 당신은 문서부터 __init__.py

를 사용해야합니다 다음 __init__.py 파일은 파이썬 패키지를 포함하는 등의 디렉토리를 치료하기 위해 필요한

; string과 같은 공통 이름을 가진 디렉토리가 모듈 검색 경로에서 나중에 발생하는 유효한 모듈을 의도하지 않게 숨기는 것을 막기 위해이 작업이 수행됩니다. 가장 간단한 경우 __init__.py은 빈 파일 일 수 있지만 패키지의 초기화 코드를 실행하거나 나중에 설명 할 __all__ 변수를 설정할 수도 있습니다.

여기에 해결책을 더 자세히 설명하는 related stack overflow question이 있습니다.

0

import 여기에 필요한 개념입니다. main.py 같은 sample.Employee

이의 그에 액세스하려면 sys.path (에 sample.py, 그 상위 디렉토리의 경로를 추가 할 수 있습니다 수입 한 번에 찾을 수 있도록하려면 해당 모듈에 정의 된 import sample 다음 액세스 기호에 필요합니다 물론, 당신은 먼저 import sys해야합니다). (예를 들어, 경로를 조작하려면 절대 경로로 '../samp' 같은 상대 경로를 설정하는, 당신은뿐만 아니라 import os 원하는 서브 모듈 os.path가 제공하는 표준 라이브러리 함수를 살펴 걸릴 수 있습니다.

+0

main.py에서 import 문을 추가하고 각 디렉토리에서 "__init__"** samp.sample import ob **에서 main.py를 실행할 때 "world"가 "hello" world "가 자동으로 표시됩니다. – Sid

+0

@Sid 파일을 처음 가져올 때,'ob = Employee()'처럼 코드가 실행될 것입니다. 만약 당신이 그 라인의 실행을 연기하고 싶으면 그들을 정리하십시오 필요할 때만 호출 할 수있는 함수로 변환 할 수 있습니다. – jez

-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를 사용하여 패키지 수 있고, 수입은 여전히 ​​동일하게 작동합니다.

관련 문제