2016-05-18 32 views
1

私はPythonでクラスを学び始め、そのような単純な電卓を構築したい:Pythonエラー "unboundメソッドを呼び出す必要があります"?

import math 

class calculator: 
    def plus(self, num1, num2): 
     plus = num1 + num2 
     print plus 
    def minus(self, num1, num2): 
     minus = num1 - num2 
     print minus 
    def power(self, num1, num2): 
     power = math.pow(num1, num2) 
     return power 

C = calculator 

num1 = raw_input("1st num > ") 
num2 = raw_input("2nd num > ") 

C.minus(num1, num2) 

しかし、いくつかの理由で、私は、スクリプトを実行すると、それは「結合していないメソッドのマイナスを()というエラーがで呼び出されなければならない私を示してい最初の引数として電卓のインスタンス(代わりにstrインスタンスを取得) "。私はこのことがどういうことを本当に理解していませんが、スクリプトを試してみると何も変わりませんでした。私はここで何が欠けていますか?

+1

電卓のインスタンスを作る必要があります:C =電卓() –

答えて

5

あなたはあなたのクラスのインスタンスを作成していない:

C = calculator 

CC.minus結合していないメソッドを作り、今クラスへの参照だけです。

あなたのクラスを呼び出すことにより、代わりにインスタンスを作成します。

C = calculator() 

また、彼らのselfパラメータを削除し、すべての機能@staticmethod Sを作る(その場合にはobjectから継承します):

class calculator(object): 
    @staticmethod 
    def plus(num1, num2): 
     plus = num1 + num2 
     print plus 
    @staticmethod 
    def minus(num1, num2): 
     minus = num1 - num2 
     print minus 
    @staticmethod 
    def power(num1, num2): 
     power = math.pow(num1, num2) 
     return power 

あなたのcalculatorクラスは、誉れた名前空間であり、generally frowned uponです。インスタンスごとの状態を追跡するためにクラスを使用しない場合は、代わりにモジュール内のすべての関数を最上位関数とし、メソッドのバインドを解除する必要はありません。

+0

誰に惑わされましたか?あなたはリファレンスがありますか? –

+1

@DavidCullenモジュールを使用するより柔軟性が低く、何も得られません。私は参照が必要ではないと思います。 –

+0

@PeterWood:なぜ私はそれに眉をすくうのか理解しています。しかし、私はそれが一般的にStackOverflowの答えでそのようなステートメントを参照を提供せずに作ることを眉をひそめていると思う。 –

関連する問題