【问题标题】:Using Methods in a Defined Class在定义的类中使用方法
【发布时间】:2015-04-01 21:03:58
【问题描述】:

我正在尝试制作一个脚本,我应该在其中制作一个 Dot 类,它采用 X 位置、Y 位置和颜色。我已经制作了课程和所有的方法。我遇到的问题是如何应用该方法。这是我所做的:

class Dot:
    '''A class that stores information about a dot on a flat grid
       attributes: X (int) Y (int), C (str)'''

    def __init__(self, xposition, yposition, color):
        '''xposition represents the x cooridinate, yposition represents
           y coordinate and color represent the color of the dot'''
        self.X = xposition
        self.Y = yposition
        self.C = color


    def __str__(self):
        "Creates a string for appropiate display to represent a point"
        return str(self.X) + " " + str(self.Y) + " " + str(self.C)

    def move_up(self,number):
        '''Takes an integer and modifies the point by adding the given
           number to the x-coordinate
           attributes: number (int)'''

        self.Y = number + self.Y

    def move_right(self,number):
        '''Takes an integer and modifies the Point by adding the given number to the y-coordinate
           attributes: number (int)'''

        self.X = number + self.X

    def distance_to(point2):
        '''Takes another Dot and returns the distance to that second Dot
           attributes: X (int) Y (int)'''

        distance = ((self.X - point2.X )**2) + ((self.Y - point2.Y)**2)
        real_distance = distance.sqrt(2)

        return real_distance



point1 = (2,3,"red")
print("Creates a" + " " + str(point1[2]) + " " + "dot with coordinates (" + str(point1[0]) + "," + str(point1[1]) + ")")
point2 = (1,2,"blue")
print("Creates a" + " " + str(point2[2]) + " " + "dot with coordinates (" + str(point2[0]) + "," + str(point2[1]) + ")")
new_point = point1.move_up(3)
print("Moves point up three on the y axis")

这是返回的内容:

AttributeError: 'tuple' object has no attribute 'move_up'

【问题讨论】:

  • 我想我们在同一个班级,我遇到了和你一样的问题……他们的答案解决了问题吗?因为他们没有修好我的
  • @JaredBanton 那你为什么不问你自己的问题呢?

标签: python class methods


【解决方案1】:

您永远不会实例化 Dot 对象,您会创建一个包含 3 个元素的元组。将其更改为:

point1 = Dot(2,3,"red")
point2 = Dot(1,2,"blue")

而不是

print("Creates a" + " " + str(point1[2]) + " " + "dot with coordinates (" + str(point1[0]) + "," + str(point1[1]) + ")")

使用

print "Creates a" + " " + point1.C + " " + "dot with coordinates (" + str(point1.X) + "," + str(point1.Y) + ")"

顺便说一句,.format() 的语法更清晰:

print "Creates a {0} dot with coordinates ({1}, {2})".format(point1.C, point1.X, point1.Y)

【讨论】:

  • 当我将脚本更改为您的脚本时,我收到一个类型错误“点”对象不支持索引。知道为什么会这样吗?
【解决方案2】:

您的代码:

point1 = (2,3,"red")

不创建 Dot 类的实例 - 它只是创建一个 tuple

要创建一个点,你必须调用它的构造函数(__init__),即:

point1 = Dot(2,3,"red")

【讨论】:

    猜你喜欢
    • 2011-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2013-10-02
    • 2020-10-24
    • 2017-05-09
    相关资源
    最近更新 更多