2014-10-05 1 views
0

나는 두 개의 파이썬 파일을 가지고 있는데 하나는 main.py이고 다른 하나는 second.py입니다. 두 개의 모듈을 사용하는 클래스가 second.py에 있습니다.다른 파일에서 클래스 가져 오기 - 클래스에서 필요로하는 'import'문을 넣을 위치

main.py에서 실행중인 코드에서 클래스를 인스턴스화 할 수 있으므로 모듈을 main.py에 가져올 수 있습니까? 또는 클래스가있는 second.py에 실제로 가져온 모듈을 가져야합니까?

main.py에 코드가있는 객체로 클래스를 인스턴스화하는 경우이 클래스 객체의 함수는 시작될 때 가져온 모듈을 사용할 수 있어야합니다. main.py. 따라서 일반적으로 import module 문은 어디에 있습니까? 당신이 second.py의 모듈에 의존하는 경우에만 main.py 수입 무엇 : main.py 또는 여기

+0

클래스가 * 정의 된 곳에, 즉'second.py'에서 클래스가 필요로하는 모듈을 '가져 오기'해야합니다. 만약 그 모듈이'main.py'에있는 다른 클래스/함수들에 의해 필요하다면,'import' 또한 거기에 있습니다. – jonrsharpe

+0

@jonrsharpe 그래서 main.py 내의 클래스 객체는 여전히 second.py에서 가져온 모듈을 사용합니까? – Sighonide

답변

0

second.py. 간단한 카운터 - 예이다?

main.py :

import time 

import second 

timer = second.Timer() 

print timer.timestamp() 

second.py :

class Timer(object): 

    def timestamp(self): 
     return time.strftime("%H:%M:%S") 

결과 :

Traceback (most recent call last): 
    File "/Users/jonrsharpe/Documents/main.py", line 7, in <module> 
    print timer.timestamp() 
    File "/Users/jonrsharpe/Documents/second.py", line 4, in timestamp 
    return time.strftime("%H:%M:%S") 
NameError: global name 'time' is not defined 

file.py에 정의 된 클래스와 함수는 해당 파일에 정의 된 범위을 사용합니다. 작업해야하는 모든 importfile.py이어야합니다. 그렇지 않으면 file.py을 가져 오는 모듈을 사용하여 file.py이 필요로하는 것을 가져 오면 어색 할 것입니다.

+0

counter.py에있는 함수는 단순히 second.py에있는 함수를 호출하는 것이 아닙니다. 내 혼란은 클래스를 인스턴스화하는 개념 안에 있습니다. 객체가 main.py에서 생성 된 경우 이름 공간을 main.py의 객체로 변경하거나 second.py 내에서 유지합니까? 그게 말이되는 경우 : -/ – Sighonide

+0

* "단순히 함수"*를 호출하는 것과 반대? 왜 클래스와 함수가 다르게 동작해야합니까? 나는 클래스 예제로 바꿨다. 놀랍게도 똑같은 일을한다. – jonrsharpe

+0

내 질문이나 진술을 비판으로 오해하지 마십시오. 그 차이를 이해하려고합니다. 나는 함수를 호출하면 second.py에서 전달 된 인자로 그 함수를 실행할 것이고 클래스를 인스턴스화하는 것은 main.py에 인스턴스를 가져다 줄 것이라고 생각하지만 클래스 인스턴스가 second.py를 사용한다는 것을 이해하면 실행해야한다. 인스턴스화 된 위치에 관계없이 가져온 모듈 (예 : 증명) 건배. – Sighonide