从海龟导入*和导入海龟差异的Python

时间:2020-06-06 00:28:49

标签: python turtle-graphics python-turtle

我正在尝试使用一本关于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可以很好地工作。这不是书所说的,但这是唯一可行的方法。发生什么事了?

1 个答案:

答案 0 :(得分:1)

如果书上写着这样的话:

import turtle
t = turtle.pen()
t.forward(10)

那可能是打字错误:

import turtle
t = turtle.Pen()
t.forward(10)

其中PenTurtle的同义词-我们之前已经在这里看到过这个问题。 (小写的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 。 (功能接口是在库加载时从面向对象的接口派生的。)使用任一接口都很好,但是同时使用两者会导致混乱和错误。通过上面的导入,可以访问面向对象的接口,并阻止功能接口。