我可以使这个代码工作,但我仍然困惑为什么它不会以我尝试的第一种方式工作。从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