2012-12-28 69 views
-2

我得到一个好点,但我仍然需要: 定义一个平等的方法来比较X和 ─如果两个点具有相同的x和y坐标另一个点的y坐标,返回True。否则,返回False 用于比较另一个点的ID的身份识别方法 ─如果两个点的ID相同,则返回True。否则,返回False 一种方法来测量从当前通过方法参数传递到另一个点的距离。学习OOP(类)

我只是混淆了你如何存储第一个点与另一个点进行比较。

这是我到目前为止有:

class Geometry(object): 

    control_id=0 
    def __init__(self): 
     self.control_id+=1 
     self.id=control_id 

class Point(object): 
    def __init__(self, x, y): 
     self.x=float(x) 
     self.y=float(y) 
    def __repr__(self): 
     return "Point object at: (%s, %s)" % (self.x, self.y) 

p1 = Point(1.216, 3.4582) 
print p1 

result: Point object at: (1.216, 3.4582) 
+1

http://learnpythonthehardway.org/book/ex42.html会是一个很好的教程通过工作,然后你可以适应你的功课。 – sean

+2

这个问题很基础,请先通过教程。检查此列表:http://stackoverflow.com/questions/207701/python-tutorial-for-total-beginners – XORcist

+1

你没有提出一个实际的问题。 –

回答

1

你已经混了你的继承和您的实例变量赋值。

尝试一些简单:

from math import sqrt 

class Point(object): 
    def __init__(self, y, x): 
     self.x = float(x) 
     self.y = float(y) 

    def __repr__(self): 
     return "Point object at: (%s, %s)" % (self.y, self.x) 

    def __cmp__(self, point): 
     """compare two points via ==, <, >, and so on""" 
     return cmp(self.dist_from_origin(), point.dist_from_origin()) 

    def dist_from_origin(self): 
     """Euclidean distance of a point from (0, 0)""" 
     return math.sqrt() #your work goes here... 

一旦你获得这么多了,尝试移动到一个Line对象,采用两个Point实例,并分配一个m属性,表示斜率。然后,尝试使用this formula为该行实现__len__函数。

编辑:

至于你id问题去,巨蟒对每个对象它创建分配一个ID ......但是,这并不意味着是“相同”的对象具有相同的ID。

>>> a = Point(2, 2) 
>>> b = Point(2, 2) 
>>> a == b 
True 
>>> a is b 
False 
>>> id(a), id(b) 
(41217048L, 41216824L) 
>>> c = a 
>>> c is a 
True 
>>> id(a), id(c) 
(41217048L, 41217048L) 

正如你所看到的,a == b说,他们是从原点一样的... 距离。

您可能想要创建一个方法来比较两个Point实例的xy属性,如果两个点具有相同的坐标,则返回True。至于id问题你有?只需使用内置的id()功能即可。

+0

这非常有帮助。当我传递“对象”时,它是否保留了ID(control_id),这就是为什么你没有添加它?还是你忽略了包含它?现在,试图找出比较。我想我只是做,如果point()=点():返回true ......实际上,这是没有意义的。我仍然困惑于如何比较点和我问的其他事情。 – Jack

+0

我更新了我的答案。 – Droogans

1

像超类中的全局计数器这样的静态字段应该明确引用:Geometry.counter

此实现计算两个点之间的距离为Manhattan距离:

import operator 

class Geometry(object): 

    counter=0 

    def __init__(self): 
     super(Geometry, self).__init__() 
     Geometry.counter += 1 
     self.ID = Geometry.counter 


class Point(Geometry): 

    def __init__(self, x, y): 
     super(Point, self).__init__() 
     self.x, self.y = (float(x), float(y)) 

    def __repr__(self): 
     return "(%d, %d)" % (self.x, self.y) 

    def __eq__(self, point): 
     if type(point) is Point: 
      if self.x == point.x: 
       if self.y == point.y: 
        return True 
     return False 

    def dist(self, point): 
     if type(point) is Point: 
      return sum(map(operator.abs, map(operator.sub, 
       [self.x, self.y], [point.x, point.y]))) 
     else: 
      return None 

输出:

>>> p=Point(2,4) 
>>> q=Point(1,5) 
>>> p.dist(q) 
2.0 
>>> p == q 
False 
>>> q.ID 
4 
>>> p 
(2, 4)