Python中面向对象的编程和类

时间:2014-04-19 02:41:29

标签: class oop python-2.7

这些是我给出的指示:

  

创建一个Point类,它由一个有序对(x,y)组成,表示x和y轴上的点的位置。构造函数允许传入x和y值,并且默认缺失值为0.必须覆盖 str 方法才能正常打印点(即“(2,5)”)

此外,创建一个由一对Point对象p和q组成的Line类。可以用两种方式之一实例化一行,如下所示。

somePoint = Point(2, 3)   
anotherPoint = Point(4, 8)
someLine = Line(somePoint, anotherPoint)

...或

someLine = Line()

在第二种情况下,构造函数应将两个点初始化为原点(0, 0)。您必须覆盖__str__方法才能打印该行,如下所示:(2, 5)--(4, 7)。您的类还必须提供返回的长度方法 段的长度。

这是模块文件

import final
somePoint = final.Point(4, 5)
anotherPoint = final.Point(5, 7)
someList = final.Line(somePoint, anotherPoint)
distance = final.Line.distance(someList)

到目前为止我的代码

import math


class Point():

    def __init__(self, x, y):
        self.xy = [x, y]
        self.printer = ("(" + str(x) + "," + str(y) + ")")

    def __str__(self):
        return str(self.printer)


class Line():

    def __init__(self, p, q):
        self.coor = [p, q]
        self.pq = (str(p) + "--" + str(q)) #<--------- From here down is where I'm having trouble.

    def distance(self):

        self.x1 = self.coor[0][0]
        self.x2 = self.coor[1][0]
        self.y1 = self.coor[0][1]
        self.y2 = self.coor[1][1]

        self.xdiff = math.fabs(int(self.x1) - int(self.x2))
        self.ydiff = math.fabs(int(self.y1) - int(self.y2))
        self.xsq = (self.xdiff ** 2)
        self.ysq = (self.ydiff ** 2)
        self.distance = float(math.sqrt(self.xsq + self.ysq))

    def __str__(self):
        return str(self.pq) + "the distance of that line is " + str(self.distance)

2 个答案:

答案 0 :(得分:0)

有几件事:

1。)distance函数有错误。前四行应该是:

self.x1 = self.coor[0].xy[0]
self.x2 = self.coor[1].xy[0]
self.y1 = self.coor[0].xy[1]
self.y2 = self.coor[1].xy[1]

2.)distance函数不返回任何内容,因此主文件中的distance变量的值为None。在函数中添加一个return语句。

3.。)您应该修复Line的字符串表示。

4.。)要求规定PointLine的参数应该是可选的。通过赋予它们默认值使它们成为可选项。

答案 1 :(得分:0)

如果必须在坐标(0,0)中初始化Point类,则构造函数必须为:

class Point():

def __init__(self, x=0, y=0):
    self.xy = [x, y]
    self.printer = ("(" + str(x) + "," + str(y) + ")")
# ...

之后,Line类的构造函数必须在构造函数中获得两个Point实例,并且默认情况下,类似于前面的类定义,您必须具有类似

的内容
class Line():
    def __init__(self, p=Point(), q=Point()):
        self.x1 = p.xy[0]
        self.y1 = p.xy[1]
        self.x2 = q.xy[0]
        self.y2 = q.xy[1]

    def distance(self):
        return math.sqrt((self.x1-self.x2)**2 + (self.y1 - self.y2)**2)

str 覆盖方法的定义很糟糕。如果你想要问题,请使用

    def __str__(self):
        return str('(' + str(self.x1) + ', ' + str(self.x2) + ')--(' + str(self.x2) + ', ' + str(self.y2) + ')')