我可以使這個代碼工作,但我仍然困惑爲什麼它不會以我嘗試的第一種方式工作。從python中的另一個文件導入類 - 我知道修正,但爲什麼不是原來的工作?
我正在練習python,因爲我的論文將被編碼(使用Arduino和PC界面來做一些很酷的事情)。我試圖從另一個文件導入一個類到我的主程序,以便我可以創建對象。這兩個文件都在同一個目錄中。如果您現在查看代碼,可能會更容易。
#from ArduinoBot import *
#from ArduinoBot import ArduinoBot
import ArduinoBot
# Create ArduinoBot object
bot1 = ArduinoBot()
# Call toString inside bot1 object
bot1.toString()
input("Press enter to end.")
這是非常基本的ArduinoBot類
class ArduinoBot:
def toString(self):
print ("ArduinoBot toString")
無論是前兩個註釋掉的import語句將會使這項工作,但不是最後一個,這對我來說似乎是最直觀,最普遍。在這裏沒有很多代碼出錯,當我聽到關於Python的許多好東西時,碰到這種尖銳的語言特定怪癖有點令人沮喪。無論如何,我必須做錯了什麼,但爲什麼不簡單的'導入ClassName'或'導入FileName'工作?
謝謝你的幫助。在你的主程序
class foo(object):
pass
class bar(object):
pass
class example(object):
pass
現在,如果你這樣做:
實際上'導入FileName'的作品,只要文件在你的$ PYTHONPATH。 – adamsmith
這根本不是「挑剔的」。在第一種情況下,您將模塊的整個名稱空間導入本地名稱空間。在第二種情況下,您將模塊名稱空間中的一個類導入到本地名稱空間中。第三,您將模塊本身導入到本地名稱空間,因此,您必須以其成員身份訪問其成員。如果你沒有像你的類一樣命名你的文件(這真的是Java的東西),或許就像'arduino_lib',那麼它可能會更清晰。 –
@ sr2222 - 我通常在它們所在的模塊之後避免命名類,但是至少有一個stdlib模塊('datetime')有先例。 – mgilson