0

これは私のコードです:

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)

クラスから関数を作成する方法は? 前もって感謝します!

4

3 に答える 3

0

どうしてもこのようにしなければならない場合は、次のように修正してください。

  1. 名前を混ぜないでください -mathモジュールとクラスの両方です。別の名前を使用してください。
  2. math.__init__(self, x, y)無意味です。親クラスから継承されたメンバーを初期化するには、 を使用しますsuper()。この場合、親クラスのコンストラクターが行っていること以外は何もしていないため、それを行う必要はありません。
  3. str文字列を返す必要があります。

そのために:

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))

このようにする必要がない限り(宿題など)、関数のようなシンプルなデザインを使用することを強くお勧めします。

于 2013-09-04T10:07:44.947 に答える
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)
于 2013-09-04T10:20:59.570 に答える