__init __()需要4个参数(给定3个)

时间:2014-11-25 08:03:27

标签: python

通过给出x和y坐标来定义点。可以使用distance_from方法计算两点之间的距离。点应至少公开提供以下属性x,y和distance_from。

通过给出中心点和半径来定义圆圈。 Circle的方法是is_inside,如果给定的点在圆圈内,则回答。圆圈应至少公开提供以下属性center,radius和is_inside。

这里的问题是我无法启动我的父类和基类。

旁注:funtions和类distance_from,Circle,circle.is_inside只需要一个p。

import math
class Point():
    def __init__(self, xpoint, ypoint):
        self.xpoint = xpoint
        self.ypoint = ypoint
    def distance_from(xpoint, ypoint):
        distance = math.sqrt(((p1.xpoint-p2.xpoint)**2)+((p1.ypoint-p2.ypoint)**2))
        print(distance)
class Circle(Point):
    def __init__(self, xpoint, ypoint, r):
       super(Circle, self).__init__(xpoint, ypoint)
       self.r = r
    def is_inside(xpoint, ypoint):        
        if self.r > distance:
            print("False")
        else:             
            print("True") 
p1 = Point(0, 0) 
p2 = Point(2, 4) 
p1.distance_from(p2)
circle  = Circle(p2,4)
circle.is_inside(p1)

3 个答案:

答案 0 :(得分:0)

将你的系数更改为:我在你的错误中添加了评论

import math
class Point(object): # Add object here
    def __init__(self, xpoint, ypoint):
        self.xpoint = xpoint
        self.ypoint = ypoint
    def distance_from(self, xpoint, ypoint):  # Missing self here
        distance = math.sqrt(((p1.xpoint-p2.xpoint)**2)+((p1.ypoint-p2.ypoint)**2))
        print(distance)

class Circle(Point):
    def __init__(self, xpoint, ypoint, r):
        super(Circle, self).__init__(xpoint, ypoint)
        self.r = r
    def is_inside(self, point):  # Missing self here
        if self.r > self.distance_from(point.xpoint, point.ypoint): # You'll have to callculate distance here
            print("False")
        else:             
            print("True") 
p1 = Point(0, 0) 
p2 = Point(2, 4) 
p1.distance_from(p1.xpoint, p1.ypoint)  # Missing points
c  = Circle(p1.xpoint, p1.ypoint, 4)  # Missing points
c.is_inside(p2)

如果你不想使用super()。 init ,请使用:

Point.__init__(self, xpoint, ypoint)  # Change super to the superclass name.  Add self to the init method

答案 1 :(得分:0)

一些注意事项:

  • 成员函数总是将self作为第一个参数。
  • 成员函数应该只能访问通过self或fuction参数访问的变量,而不是全局范围。

    import math
    
    class Point(object):
        def __init__(self, xpoint, ypoint):
            self.xpoint = xpoint
            self.ypoint = ypoint
    
          # Here you where missing self and you were accessing p2 that exists in global scope.
        def distance_from(self, another_point):
              distance =  math.sqrt(((self.xpoint-another_point.xpoint)**2)+((self.ypoint-another_point.ypoint)**2))
              print(distance)
    
    
    class Circle(Point):
        def __init__(self, xpoint, ypoint, r):
          super(Circle, self).__init__(xpoint, ypoint)
          self.r = r
    
        def is_inside(self, another_point):
            # you forgot to calculate the distance
            if self.distance_from(another_point) < self.r:
                print("True")
            else:
                print("False")
    
    p1 = Point(0, 0)
    p2 = Point(2, 4)
    p1.distance_from(p2)
    
    #create a circle centered at 2,4 with radius 4
    circle  = Circle(2, 4, 4)
    circle.is_inside(p1) # returns "True"
    

答案 2 :(得分:-1)

手动调用__init__时,您必须提供self参数。