2017-12-18 282 views
0

我一直在學習使用C++中的OOP學習python中的類。 我正在研究一個項目,我在一個文件中定義了一個類,並且在單獨文件的類中使用了一個重要函數。 我必須在第一個文件中調用這個類,但是我得到了ImportError。 太棒了,如果你能幫到你。從其他python文件和後續類使用python函數?

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()'都是在Python中複製'print()'一個已經可用的函數。 – Mangohero1

回答

0

你絕對需要重新設計你的項目。即使你設法逃脫循環進口(通過移動import的功能IE裏面 - 但做),你仍然會得到一個NameError: name 'b' is not defined因爲bprnt沒有定義。

除非prnt不能a類中定義(爲什麼?),可以考慮在第三界定prnt,「utils的」文件,並在這兩個try1.pytry2.py導入並傳遞一個對象到它,所以它可以訪問所有的其屬性。

+0

嘿@Deepspace,我一直在試圖模仿這個cpp代碼。有沒有其他方法可以做到這一點?這兩個cpp代碼是:try1.cpp #include「try2.h」 void a :: prnt(){ \t func1(); } int main(){ \t a ab(); \t ab.func1(); }和第二try2.h是#包括 類{ 私人: \t空隙func1的(){ \t \t的std :: 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 

您的腳本試圖導入東西它已經試圖導入早些時候。 Python可能會推斷它不能導入它。 :)

+0

感謝downvote,但你會不會解釋誰給了我這個? – IMCoins

+0

我沒有downvote,但其他人可能有,因爲他們想看到更多的指導。儘管更詳細地解釋問題很有用,但它可能會使OP處於「好吧,我現在看到我的代碼因爲這個原因而中斷了,但我能做些什麼呢?」。也許你可以推薦一種替代方式來安排項目的組成部分。 – Kevin

相關問題