如何修理我的数学课?

时间:2013-09-04 09:52:03

标签: python python-3.x

这是我的代码:

class math():
    def __init__(self, x, y):
        self.x = x
        self.y = y
class pythagorus(math):
    def __init__(self, x, y):
        math.__init__(self, x, y)
    def __str__(self):
        import math
        return math.sqrt(x**2+y**2)

q = pythagorus(4, 5)
print(q)

如何从类中创建函数,如果有意义,我想返回math.sqrt(x * 2 + y * 2)的结果,但我可以似乎让它工作?提前谢谢!

3 个答案:

答案 0 :(得分:1)

您需要参考self来访问班级中的属性:

class pythagoras(math):
    def __str__(self):
        import math
        return str(math.sqrt(self.x**2 + self.y**2))

__str__方法必须返回一个字符串值,因此使用__str__这有点......很奇怪。无需覆盖__init__方法,您没有在其中执行任何新操作。

您可能希望将基类命名为math以外的其他内容,这样您就不会屏蔽模块(而不需要在__str__方法中导入它) 。最佳做法是将CamelCase名称用于类; Math将是更好的选择。

对于这种操作,我只使用一个函数:

import math

def pythagoras(x, y)
    return math.sqrt(x**2 + y**2)

充其量,你在数学课上做pythagoras方法

import math

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

    def pythagoras(self):
        return math.sqrt(self.x ** 2 + self.y ** 2)

答案 1 :(得分:0)

如果绝对必须这样做,请更正以下内容:

  1. 不要混淆名称 - math既是模块也是类。使用其他名称。
  2. math.__init__(self, x, y)毫无意义。要初始化从父类继承的成员,请使用super()。在这种情况下,您不必这样做,因为除了父类的构造函数正在做的事情之外,您没有做任何事情。
  3. str必须返回一个字符串。
  4. 为此目的:

    import math
    class Point():
        def __init__(self, x, y):
            self.x = x
            self.y = y
    
    class Pythagorus(Point):
        def __init__(self, x, y):
            # Possibly other things need to be done, but not in this case.
            super().__init__(x, y)
    
        def __str__(self):
            return str(math.sqrt(self.x ** 2 + self.y ** 2))
    

    我强烈建议使用一个简单的设计,就像一个函数,除非你需要这样做(例如家庭作业)。

答案 2 :(得分:0)

您不需要覆盖子类的__init__,因为您没有更改实现。

由于您的__str__方法是通用的,因此它应该是父级的一部分。孩子应该只实现特定的对象功能。

import math as _math

class Math():
   """ A generic math class """
   def __init__(self, x, y):
      self.x = x
      self.y = y
      self.result = 0

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

class Pythagorus(Math):
    def calculate(self):
        self.result = _math.sqrt(self.x ** 2 + self.y ** 2)

obj = Pythagorus(8,5)
obj.calculate()
print(obj)