2017-09-13 25 views
-1

在一個文件名爲BinarySearch.py我有以下幾點:如何導入我自己的python文件?

class SearchResult:  
    def __init__(self): 
     self.was_found = False 
     self.index = 0 
    def __str__(self): 
     s = "SearchResult" 
     s = s + " was found: " 
     s = s + str(self.was_found) + "index: " + str(self.index) 
     return s 

在另一個文件中,假設它被命名爲​​我:

import os 
cwd = os.getcwd() 
import sys 
sys.path.append(cwd) 

import BinarySearch 

然而,當我嘗試運行​​,我得到以下錯誤消息:

NameError: name 'SearchResult' is not defined 

它看起來像import BinarySearch實際上沒有im端口BinarySearch

我正在使用Spyder IDE。這兩個文件(BinarySearch.py和​​)位於相同的目錄中。此外,我去了工具> PYTHONPATH經理,並將目錄添加到路徑。我也嘗試重新啓動spyder,以查看是否需要使路徑更改生效。它仍然不起作用。

編輯:

在​​它扔錯誤的代碼行是以下幾點:

sr = SearchResult() 

本來我以爲這種說法import BinarySearch也有同樣的行爲,如果我複製的全部內容的BinarySearch.py​​並將其粘貼在import語句位於file2.py內部的位置。我現在看到,這不是如何import的作品。

回答

4

的當前目錄已經在路徑中,您無需顯式地把它存在以任何方式(通過IDE或通過sys.path的)

在你的第二個代碼片段你錯過了最後一行我asume是給你的錯誤,而最有可能的是一樣的東西

print(SearchResult()) 

應該

print(BinarySearch.SearchResult()) 

或者你可以導入你改變

from BinarySearch import SearchResult 

然後你可以做

print(SearchResult()) 
+0

'從BinarySearch導入SearchResult'是不夠的。文件BinarySearch.py​​中還有其他的東西,除了'SearchResult'之外的東西,我也需要它。 –

+0

在這種情況下,使用'import BinarySearch'並引用模塊名稱:'BinarySearch.SearchResult','BinarySearch.SomethingElse',...或使用'從BinarySearch導入SearchResult,SomethingElse'。另一種選擇是使用'from BinarySearch import *',這將允許您使用BinarySearch中的所有內容,但這是[不鼓勵](https://docs.python.org/2/howto/doanddont.html#from-module-進口) – dacada

0

一種解決方案似乎是從改變import語句

import BinarySearch 

到:

from BinarySearch import * 

星/星號實質上是指「全部導入」,它導入everythi ng的文件BinarySearch.py,包括SearchResult類。

常規簡單簡單導入也會導入所有內容,但會強制您通過命名空間訪問事物。文件BinarySearch.py中的所有內容現在位於命名空間BinarySearch之內。我們可以單獨保留原始import聲明,但只要我們使用來自BinarySearch的​​中的某些內容,我們就必須添加前綴。我們將有一些代碼看起來是這樣的:

# inside file named file2.py 
sr = BinarySearch.SearchResult() 

如果我們厭倦了以前的事情寫BinarySearch.所有的時間,我們可以爲命名空間創建一個別名,像這樣:然後

import BinarySearch as bs 

,在​​內部,陳述sr = bs.SearchResult()將工作得很好。

相關問題