2013-05-29 4 views
1

Я начинаю с Python, как я, вероятно, заявил в своих предыдущих вопросах, и некоторые из тем, которые я проводил, не дают подробных объяснений, которые мне потребуются, чтобы подобрать материал, чтобы я есть вопрос. Вопрос, который задан beign, - «Добавить расстояние метода() в класс Point. Он принимает другой объект Point в качестве входного сигнала и возвращает расстояние до этой точки (из точки, вызывающей метод).Определение классов Python

Что он ищет является следующий результат, когда все это вход в модуль

>>> c = Point() 
>>> c.setx(0) 
>>> c.sety(1) 
>>> d = Point() 
>>> d.setx(1) 
>>> d.sety(0) 
>>> c.distance(d) 
1.4142135623730951 

Вот что у меня есть:.

class Point: 
    def setx(self, xcoord): 
     self.x = xcoord 
    def sety(self, ycoord): 
     self.y = ycoord 
    def get(self): 
     return(self.x, self.y) 
    def move(self, dx, dy): 
     self.x += dx 
     self.y += dy 

И тогда я не уверен, что если мне нужно определить расстояние, каким образом Спасибо вы.

У меня есть ясная основа, как я уверен, что я начну это, но тогда, когда дело доходит до определения расстояния, я очень застрял.

+6

Пожалуйста, не используйте геттеры и сеттеры в Python. Просто войдите в переменную экземпляра напрямую или используйте [свойства] (http://docs.python.org/2/library/functions.html#property) для нетривиальных переменных экземпляра. – Cairnarvon

ответ

3

Вам нужен способ, как этот

def distance(self, other): 
    dist = math.hypot(self.x - other.x, self.y - other.y) 
    return dist 

Вы также должны import math в начале вашей программы

Помимо: Это не вещий вообще иметь ваши setx и sety методы. Вы должны просто назначить атрибуты напрямую. например c.x = 0

 
Help on built-in function hypot in module math: 

hypot(...) 
    hypot(x, y) 

    Return the Euclidean distance, sqrt(x*x + y*y). 
0

Ниже приведен пример без установки и получения. __init__ не является обязательным. Я добавил __call__ вместо get.

class Point: 
    def __init__(self, *terms): 
     self.x = 0 
     self.y = 0 
    def __call__(self): 
     return(self.x, self.y) 
    def move(self, dx, dy): 
     self.x += dx 
     self.y += dy 
    def distance(self, other): 
     dist = math.hypot(self.x - other.x, self.y - other.y) 
     return dist 

>>> c = Point() 
>>> c.x = 0 
>>> c.y = 1 
>>> d = Point() 
>>> d.x = 1 
>>> d.y = 0 
>>> c() 
(1, 0) 
>>> c.distance(d) 
1.4142135623730951 
Смежные вопросы