我正在尝试使用一本关于python的书,并且我了解from turtle import *
会将所有内容导入当前的名称空间,而import turtle
只是将模块引入,因此可以将其作为类来调用。但是,当我尝试使用后者时,它会破裂。
>>> import turtle
>>> t = turtle.pen()
>>> t.pen.forward(10)
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
t.pen.forward(10)
AttributeError: 'dict' object has no attribute 'pen
但是,使用from turtle import*
,将pen
分配给对象并键入命令forward
可以很好地工作。这不是书所说的,但这是唯一可行的方法。发生什么事了?
答案 0 :(得分:1)
如果书上写着这样的话:
import turtle
t = turtle.pen()
t.forward(10)
那可能是打字错误:
import turtle
t = turtle.Pen()
t.forward(10)
其中Pen
是Turtle
的同义词-我们之前已经在这里看到过这个问题。 (小写的pen()
是一个实用函数,除有错误外很少使用。)
我知道
from turtle import *
会将所有内容导入到 当前的名称空间,而import turtle
只是将模块引入其中 可以被称为一个班级
我的建议:都不使用。而是:
from turtle import Screen, Turtle
screen = Screen()
turtle = Turtle()
turtle.forward(10)
# ...
screen.exitonclick()
原因是Python Turtle公开了两个编程接口,一个是 functional (面向初学者)和一个 object-oriented 。 (功能接口是在库加载时从面向对象的接口派生的。)使用任一接口都很好,但是同时使用两者会导致混乱和错误。通过上面的导入,可以访问面向对象的接口,并阻止功能接口。