【发布时间】:2021-01-29 16:01:02
【问题描述】:
现在我正在阅读 Think Python,目前正在阅读第 4 章,但我有一个问题。
在 4.1 的海龟模块中,有这样的东西:
>>> import turtle
>>> bob = turtle.Turtle()
这真的让我很困惑。我认为不带括号的函数名(如 print、math.sqrt 或 int)代表函数对象,带括号的函数名代表该函数的返回值。所以我认为turtle.Turtle() 应该表示该函数执行后的值。
但后来这本书告诉我: “turtle 模块(带有小写‘t’)提供了一个名为 Turtle(带有大写 ‘T’)的函数,它创建了一个 Turtle 对象,我们将其分配给一个名为 bob 的变量。”
好的,然后我试了一下。当 bob 被分配turtle.Turtle() 时,我得到:
>>> type(bob)
<class 'turtle.Turtle>
但如果我做了 bob=turtle.Turtle,我得到了:
>>> type(bob)
<class 'type'>
>>> print(bob)
<class 'turtle.Turtle>
还有一件事让我很困惑......
我读这本书就像我的编程 101 书一样,所以我不知道它们是从哪里来的。 谁能回答这个问题并告诉我更多关于“对象”概念的信息?
【问题讨论】:
-
您自己的描述很简单地解释了它,“我认为没有括号的函数名(如 print、math.sqrt 或 int)代表函数对象,而带括号的函数名代表对于该函数的返回值“虽然你正在使用一个类实例/类
-
@RussJ 不,这不是正在发生的事情。
turtle是一个模块,Turtle是该模块中的一个类(或者可能只是函数,但在本例中是一个类)。 -
"这真的让我很困惑。我认为没有括号的函数名(如 print、math.sqrt 或 int)代表函数对象,而带括号的函数名代表该函数的返回值。”这基本上是正确的。更准确地说,带括号是一个函数调用表达式,它计算函数的返回值。我
-
“‘对象’的概念在教程中被广泛介绍。您可以在互联网上找到许多很棒的教程,但 Stack Overflow 不是其中之一。请拨打tour,并阅读How to Ask 和what's on-topic。欢迎使用 Stack Overflow!
-
是的,所以,Python 是一种面向对象的语言,everything 是一个对象。整数、字符串、浮点数、
None、函数等。基本上,就目前而言,您可以将对象视为可以分配给变量的任何东西。所以如果你能做到x = <whatever>那么“whatever”就是一个对象。