2017-12-18 5 views
0

나는 C++로 OOP를 배운 후에 파이썬으로 클래스 작업을 배웠다. 나는 하나의 파일에 정의 된 클래스가있는 프로젝트와 별도의 파일에있는 클래스에서 사용되는 중요한 함수로 작업 중이다. 첫 번째 파일에서 클래스를 호출해야하지만 ImportError가 발생합니다. 도움이된다면 좋을 것입니다.다른 파이썬 파일과 후속 클래스에서 파이썬 기능 사용?

try1.py

from try2 import prnt 

class a: 
    def __init__(self): 
     print("started") 
    def func1(self): 
     print("func1") 

prnt() 

try2.py

예에 관해서는
from try1 import a 

b = a() 
b.func1() 

def prnt(): 
    b.func() 

, 위의 예에서 나는 try1.py를 실행하고 때, 내가 ImportError를 점점 오전 : 이름을 가져올 수 없습니다 'prnt'.

+4

주기적인 수입은 결코 좋지 않습니다. –

+0

나쁜 접근법. 나는 try1에서'import'와'prnt()'호출을 제거하고 try2 만 실행하는 것을 고려할 것이다. 'prnt()'는 파이썬에서 이미 사용 가능한 함수 인'print() '를 복제합니다. – Mangohero1

답변

0

프로젝트를 반드시 재 설계해야합니다. 경우에도 멀리 순환 수입으로 얻을 관리했던 (함수 내부로 import를 이동하여 즉 -하지만 그것을하지 할) 당신은 여전히 ​​NameError: name 'b' is not definedprnt에 정의되지 않은 b 이후를 얻을 것이다. prnt이 클래스 a에 정의 할 수 없습니다

하지 않는 한 (왜?), 세 번째로, "유틸"파일을 prnt을 정의 고려하고 모두 try1.pytry2.py에 가져올하고 모든 액세스 할 수 있도록로 개체를 전달 그것의 속성.

+0

안녕하세요 @Deepspace, 나는이 cpp 코드를 모방하려했습니다. 이 작업을 수행 할 수있는 다른 방법이 있습니까? 두 cpp 코드는 다음과 같습니다. try1.cpp #include "try2.h" void a :: prnt() { \t func1(); } int main() { \t ab(); \t ab.func1(); } 및 제 try2.h는 { 전용 #INCLUDE 클래스 : \t 공극 FUNC1() { \t \t 표준 : COUT << "FUNC1"; \t} \t void prnt(); }; – Mayank

-2

코드 을 읽고 오류을 읽고 그로부터 뭔가를 공제하십시오. 스크립트가 이미 이전에 가져 오기 위해 노력하고 있습니다 뭔가를 가져 오기 위해 노력하고

Traceback (most recent call last): 
    File "C:\Users\Kilian\Desktop\Code\Garbage\tmp.py", line 7, in <module> 
    from temp2 import prnt 
    File "C:\Users\Kilian\Desktop\Code\Garbage\temp2.py", line 1, in <module> 
    from tmp import a 
    File "C:\Users\Kilian\Desktop\Code\Garbage\tmp.py", line 7, in <module> 
    from temp2 import prnt 
ImportError: cannot import name prnt 

: 당신이 그것을 실행하면 , 여기에 오류 메시지입니다. 파이썬은 아마 그것을 가져올 수 없다는 것을 추론하고 있습니다. :)

+0

downvote 주셔서 감사하지만, 누가 나에게 이걸 주 었는지 설명해 주시겠습니까? – IMCoins

+0

나는 downvote하지 않았지만, 다른 사람들은 조금 더 많은 안내를보고 싶어했을 것입니다. 문제를보다 자세히 설명하는 것이 유용하지만, "좋아, 이제는 내 코드가 깨 졌음을 알 수있다.하지만 어떻게해야 할까?"라는 질문에 OP를 남길 수 있습니다.아마도 프로젝트의 구성 요소를 배열하는 다른 방법을 추천 할 수 있습니다. – Kevin