Jed*_*uke 1 python import class file
我可以使这个代码工作,但我仍然感到困惑,为什么它不会工作我尝试的第一种方式.
我正在练习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.")
Run Code Online (Sandbox Code Playgroud)
这是非常基本的ArduinoBot类
class ArduinoBot:
def toString(self):
print ("ArduinoBot toString")
Run Code Online (Sandbox Code Playgroud)
前两个注释掉的导入语句中的任何一个都可以使这个工作,但不是最后一个,这对我来说似乎是最直观和最普遍的.这里出现错误的代码并不多,当我听到一些关于Python的好东西时,碰到这些挑剔的语言特有的怪癖有点令人沮丧.无论如何我必须做错事,但为什么简单的'import ClassName'或'import FileName'不起作用?
谢谢您的帮助.
考虑一个文件(example.py):
class foo(object):
pass
class bar(object):
pass
class example(object):
pass
Run Code Online (Sandbox Code Playgroud)
现在在您的主程序中,如果您这样做:
import example
Run Code Online (Sandbox Code Playgroud)
应该从文件导入什么example.py?只是上课example?班级应该foo也来吗?如果import module将整个模块的命名空间直接拖到当前命名空间中,则含义会过于模糊.
这个想法是命名空间很精彩.它们让您知道类/功能/数据来自何处.它们还允许您将相关事物组合在一起(或者等效地,它们可以帮助您将不相关的事物分开!).模块设置一个命名空间,你可以通过你使用的方式告诉python你想要如何将该命名空间带入当前上下文(命名空间)import.
from ... import * 说 - 将该模块中的所有内容直接放入我的命名空间.
from ... import ... as ... 说,只将我指定的东西直接带入我的命名空间,但在这里给它一个新的名字.
最后,import ...简单地说将该模块带入当前命名空间,但将其保持独立.由于(至少)2个原因,这是生产代码中最常见的形式.
foo不与fooin 冲突的本地类example.py- 您可以访问该viaexample.foo考虑:
from foo import *
from bar import *
a = AClass() #did this come from foo? bar? ... Hmmm...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,example要从中访问该类example.py,您还可以执行以下操作:
import example
example_instance = example.example()
Run Code Online (Sandbox Code Playgroud)
但你也可以得到foo:
foo_instance = example.foo()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
340 次 |
| 最近记录: |