2015-07-01 3 views
1

Я создал родительский класс (геометрию) и подкласс (Point) несколькими способами. Я пытаюсь использовать методы в двух классах для запуска процессов в тестовой функции. Мне трудно получить доступ к этим методам внутри функции. Я создал три точки в тестовой функции, P1 = (0,3), P2 = (-3,7) и P3 = (-3,7), и хочу выполнить на них задачу. Например, def init (self, x, y): должен возвращать координату x, y точки, указанной в тестовой функции. Я пробовал все следующее: print (test (Point (p1))), тест печати (p1.Point) и печать p1.Point. Ни один из них не работал. Может кто-нибудь, пожалуйста, дайте указания о том, как я могу это выполнить?Python 2.7: Передача методов класса другой функции

Мой код:

class Geometry(object): 
    uniqueID = -1 
    def __init__(self): 
    Geometry.uniqueID += 1 
    self.id = Geometry.uniqueID 

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

    def __str__(self): 
     return '(%.2f, %.2f)' % (int(self.x*100)/100.0, int(self.y*100)/100.0) 


    def __eq__(self, point): 
     if type(point) is Point: 
      if self.x == point.x and self.y == point.y: 
      return True 
      else: 
       return False 
     else: 
      raise Exception("The input parameter has to be a Point object!") 

    def identify(self, other): 
     if type(other) is Point: 
      if self.id == other.id: 
       return True 
      else: 
       return False 
     else: 
      raise Exception("The input parameter has to be a Point object!") 

    def distance(self, other): 
     if type(other) is Point: 
      x_square = (other.x - self.x) ** 2 
      y_square = (other.y - self.y) ** 2 
      d = (x_square + y_square) ** 0.5 
      return float(d) 
     else: 
      raise Exception("The input parameter has to be a Point object!") 

    def quadrant(self): 
     output = "" 
     if self.x > 0 and self.y > 0: 
      output = "Quad I" 
     elif self.x < 0 and self.y > 0: 
      output = "Quad II" 
     elif self.x < 0 and self.y < 0: 
      output = "Quad III" 
     elif self.x > 0 and self.y < 0: 
      output = "Quad IV" 
     elif self.x == 0: 
      output = "Y-axis" 
     elif self.y == 0: 
      output = "X-axis" 
     elif self.x == 0 and self.y == 0: 
      output = "Origin" 

     return output 

def test(p1,p2,p3): 
    p1 = Point(0, 3) 
    p2 = Point(-3, 7) 
    p3 = Point(-3, 7) 



def collinear(p1, p2, p3): 
    p1x = p1.x 
    p1y = p1.y 

# m1 = ? 
# m2 = ? 


def main(): 
    print (p1.Point) 

if __name__ == "__main__": 
    main() 

ответ

1

С внедрением __ __ ул у вас есть, я предполагаю, что вы хотите явно отобразить координаты при печати объекта. В этом случае я смог импортировать ваш код и узнать, что ваша логика печати работает хорошо.

Ниже приводится рабочий код:

class Geometry(object): 
    uniqueID = -1 
    def __init__(self): 
     Geometry.uniqueID += 1 
     self.id = Geometry.uniqueID 

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

    def __str__(self): 
     return '(%.2f, %.2f)' % (int(self.x*100)/100.0, int(self.y*100)/100.0) 


    def __eq__(self, point): 
     if type(point) is Point: 
      if self.x == point.x and self.y == point.y: 
       return True 
      else: 
       return False 
     else: 
      raise Exception("The input parameter has to be a Point object!") 

    def identify(self, other): 
     if type(other) is Point: 
      if self.id == other.id: 
       return True 
      else: 
       return False 
     else: 
      raise Exception("The input parameter has to be a Point object!") 

    def distance(self, other): 
     if type(other) is Point: 
      x_square = (other.x - self.x) ** 2 
      y_square = (other.y - self.y) ** 2 
      d = (x_square + y_square) ** 0.5 
      return float(d) 
     else: 
      raise Exception("The input parameter has to be a Point object!") 

    def quadrant(self): 
     output = "" 
     if self.x > 0 and self.y > 0: 
      output = "Quad I" 
     elif self.x < 0 and self.y > 0: 
      output = "Quad II" 
     elif self.x < 0 and self.y < 0: 
      output = "Quad III" 
     elif self.x > 0 and self.y < 0: 
      output = "Quad IV" 
     elif self.x == 0: 
      output = "Y-axis" 
     elif self.y == 0: 
      output = "X-axis" 
     elif self.x == 0 and self.y == 0: 
      output = "Origin" 

     return output 

def test(): 

    p1 = Point(0, 3) 
    p2 = Point(-3, 7) 
    p3 = Point(-3, 7) 

    return p1, p2, p3 




def collinear(p1, p2, p3): 
    p1x = p1.x 
    p1y = p1.y 

# m1 = ? 
# m2 = ? 


if __name__ == "__main__": 

    p1, p2, p3= test() 

    #Either this 
    print "p1 is " + p1.__str__() 
    print "p2 is " + p2.__str__() 
    print "p3 is " + p3.__str__() 

    print "\n*******************\n" 

    #Or this 
    print p1 
    print p2 
    print p3 

Вы можете проверить. Также вы можете убедиться, что точка (0,3, 0,4) является локальной для функции, в которой вы фактически выполняете печать.

Пример выходных данных выше:

p1 is (0.00, 3.00) 
p2 is (-3.00, 7.00) 
p3 is (-3.00, 7.00) 

******************* 

(0.00, 3.00) 
(-3.00, 7.00) 
(-3.00, 7.00) 
+0

Таким образом, p1 координаты должны быть перечислены в основной функции? Я пытался создать тестовую функцию с тремя точками, перечисленными в этой функции, P1 = (0,3), P2 = (-3,7) и P3 = (-3,7), и напечатать эти координаты с помощью основного функция. Я хочу, чтобы мой вывод возвращал координаты = (0, 3) –

+0

, поэтому p1, p2 и p3 имеют локальную функцию для проверки работоспособности(), предполагающую, что функция типа main() не знает, что такое значения p1, p2, p3. Я отредактировал свое решение. – skippy

+0

Привет, Скиппи, я не заметил никаких изменений. –

Смежные вопросы