turtle.urtle()和x = turtle.urtle()

问题描述:

之间的区别我很难尝试构建我的标题,因为我仍然是初学者,不知道如何去问我想知道的内容简洁的态度。turtle.urtle()和x = turtle.urtle()

基本上,我的问题是什么,有人可以帮我找出刚才使用turtle.Turtle()函数和分配变量到上述函数之间的区别是什么?测试它,使用turtle.Turtle()本身每次都会创建一个新的乌龟对象。例如:

import turtle 
turtle.Turtle().forward(90) 
turtle.Turtle().left(90) 

上面的代码将创建两个龟对象,一个由90前进和一个匝90度离开,但停留在同一位置。

import turtle 
bob = turtle.Turtle() 
bob.forward(90) 
bob.left(90) 

上面的代码将创建对象Turtle并将其分配给变量bob。然后它会将该物体向前移动90°,然后向左转90°。如果bob本质上是turtle.Turtle(),那么为什么每次使用“bob”时都不会创建另一个Turtle对象的实例?

预先感谢您!

简而言之,turtle.Turtle()Turtle类的构造函数方法;它返回该类的一个实例。如果你没有把输出分配给一个变量,它基本上会创建一个的实例,它立即丢弃(这不完全是真的,因为你可以在调用之后使用特殊的python变量_来访问它)。当你键入turtle.Turtle().forward(90),在turtle.Turtle()之后立即创建类的隐式实例,并且在该隐式实例上调用方法forward()。但是由于没有引用该隐式实例,因此它最终被Python的垃圾收集器丢弃。

当您致电bob = turtle.Turtle()时,您基本上保持对创建的实例的引用(引用称为bob)。您可以通过使用变量bob继续访问同一个实例。

由于您没有提供执行Turtle.forward(),我们不知道forward()返回的是什么。它可能是它不返回任何东西(即返回None),它可能返回一些任意值它可能会返回实例本身!在后一种情况下,您可以执行类似于bob = turtle.Turtle().forward(90)的操作,其实质上与bob = turtle.Turtle(); bob.forward(90)相同。我会留在那里。为了获得更好,更完整的答案,你应该阅读关于[OOP](面向对象的编程)(可能是检查参考更深入的一个好主意)。

+0

啊,我想我现在明白发生了什么,通过创建一个变量bob并将其赋值给实例turtle.Turtle(),我们基本上将该实例保存在变量bob中。由于我是初学者,所以我正在考虑=标记的方式,更像是它的数学版本。我尽量避开这种思维方式,但我认为它会更自然,因为我一直在练习。对于一个似乎如此复杂的问题,这样一个简单的答案!非常感谢您向我澄清! –

+0

好的,当你是一个语言的新手时,这是一个重要的区别。在Python(和许多其他语言)中,一个'='是一个赋值运算符:右侧的值被分配给左侧的变量。双等号('==')是比较运算符,如果左侧和右侧相等则返回“真”,否则返回“假”。 – jorgeh