当前位置: 代码迷 >> python >> Python OOP-为什么在功能中需要模块名称
  详细解决方案

Python OOP-为什么在功能中需要模块名称

热度:108   发布时间:2023-07-16 09:44:02.0

我正在用Python学习OOP,却不明白为什么必须将“ turtle”放入函数“ draw()”的定义中。 该代码也可以在没有乌龟的情况下运行(只是“ def draw(self)” ...)-那么为什么我需要将其放到那里-或它到底能做什么?

class Circle:
    def __init__(self, x=0, y=0, radius=50, color="transparent", \
        outline="black", edgeWidth=1):
        self.x = x
                (...)

    def draw(self, turtle):
        turtle.penup()
        turtle.goto(self.x, self.y)
                (...)

turtle是一个模块。 它是在全局名称空间中定义的,您可以从任何地方访问它(前提是您已正确导入模块中): import turtle

您无需将其作为参数传递给任何函数(除非您尝试执行问题中未指定的其他操作)。

即使从面向对象的角度来看,圆对象是否需要绘制turtle听起来也不错? 对我来说,这听起来很奇怪,Circle对象知道如何在没有其他参数的情况下进行绘制(假设已经在构造函数中指定了需要绘制的所有数据)。

当然,指定绘制圆形的目标可能会有所帮助。 在这种情况下,可以使用附加参数,例如circle.draw(board) (在此板上绘制自己)。 但是这里的board应该是turtle 或非sigleton可绘制对象的包装。 在Python中, turtle是一个模块,它使用的Screen是sigleton,因此,基本上,您在它上所做的所有事情(即使在不同的圆圈上)都将绘制到同一位置。

好吧,为了完整起见, 您的教科书是这样的:

import turtle
t1 = turtle.Turtle()
t2 = turtle.Turtle()

在这里, t1t2是两只不同的乌龟。 它们都将被绘制到同一屏幕上,但是它们彼此独立。 在这种情况下,有一个turtle参数是有意义的,因为您可以这样做:

c1 = Circle()
c2 = Circle()
t1 = turtle.Turtle()
t2 = turtle.Turtle()

c1.draw(t1)  # draw yourself but with the turtle 1
c2.draw(t2)  # draw yourself but with the turtle 2

而且您将进入独立圈子。 在这种情况下,这很有意义,而且可能是文本的含义。

混乱的出现是因为你被点名的说法turtle和调用它的函数从名称的方式中turtle ,因为turtle也是一个模块是全局命名空间,那么你想知道这是否将是必要的。 现在您知道这两种方法,您就可以选择一种适合您的需求了:)

希望这可以帮助!