你如何在python类中获取参数来接收值?

时间:2016-01-12 19:23:01

标签: python

我想创建一个使用Turtle模块绘制线条的类。

class Line(object):

    def __init__(self, coordinates):
        self.start_x = 0
        self.start_y = 0
        self.end_x = coordinates[0]
        self.end_y = coordinates[1]

    def drawing(self, pensize, pencolor):
        self.pensize = pensize
        self.color = pencolor

def main():
    turtle.setup(700,400, startx = 0, starty = 0)
    line = Line()
    turtle.done()
main()

我应该如何获得线类的瞬间来接收需要绘制线的位置的坐标?

我已经认识到我可以使用函数,但是,为了理解类是如何工作的,我想实现类来绘制线条。灵感来自一个我自学的项目。该项目的链接是:

http://www.cse.msu.edu/~cse231/PracticeOfComputingUsingPython/08_ClassDesign/TurtleSnowPeople/Project10.pdf

1 个答案:

答案 0 :(得分:1)

与其他某些语言不同,Python不会要求创建类。它当然是可能的,但不是必需的。

当然,绘制直线的最简单方法是简单地绘制直线:

import turtle


def main():
    turtle.setup(700, 700, startx=0, starty=0)  
    turtle.penup()
    turtle.goto(13, 42)
    turtle.pendown()
    turtle.goto(42, 13)
    turtle.done()


if __name__ == '__main__':
    main()

但很明显,您想要将其解压缩,以便您可以重复操作而无需重复这四行。最简单的方法是创建一个函数。由于您引用了turtle模块,因此您需要传入的所有内容都是开始和结束坐标:

import turtle


def draw_line(startx, starty, endx, endy):
    turtle.penup()
    turtle.goto(startx, starty)
    turtle.pendown()
    turtle.goto(endx, endy)


def main():
    turtle.setup(700, 700, startx=0, starty=0)  
    draw_line(13, 42, 42, 13)
    turtle.done()


if __name__ == '__main__':
    main()

或者你也可以使用像namedtuple这样的东西:

import turtle
from collections import namedtuple


Point = namedtuple('Point', ('x', 'y'))


def draw_line(start, end):
    turtle.penup()
    turtle.goto(start.x, start.y)
    turtle.pendown()
    turtle.goto(end.x, end.y)


def main():
    turtle.setup(700, 700, startx=0, starty=0)

    start = Point(13, 42)
    end = Point(42, 13)
    draw_line(start, end)

    turtle.done()


if __name__ == '__main__':
    main()

但如果你真的喜欢课程,你仍然可以使用它们。只需将相同的代码放入您可以放在其他任何地方的课程中。