0

私はPythonが初めてなので、この問題が発生する理由を見つけることができなかったので、このばかげた問題を手伝ってくれることを願っています. したがって、合計と減算を行う Calculator というクラスを持つ calcoo.py というファイルがあり、そのクラスを CalculatorCHild という別のクラス (同じディレクトリの別の py ファイルにあります) に継承し、Calculator の動作を拡張します。除算と乗算のメソッドを追加します。これまでのところ機能しますが、合計すると結果が重複し、プログラムの残りの部分 calcco.py がクラス Calculator 内にあると見なされるようです。だからここに私のコードがあります:

calcoo.py ファイル:

#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys
operator1= sys.argv[1]
operation= sys.argv[2]
operator2= sys.argv[3]
try:
    operator1 = float(sys.argv[1]) 
    operator2 = float(sys.argv[3])
except ValueError:
    sys.exit("Error: Non numerical Parameters")

class Calculator():

    def sumatory(self):                                   
        return float(operator1) + float(operator2)
    def substract(self):
        return float(operator1) - float(operator2)

if operation == "sum":
    print Calculator().sumatory()
elif operation == "substract":
     print Calculator().substract()
else:
    print "Error, operation not supported."

カルコチャイルド.py

#! /usr/bin/python
# -*- coding: utf-8 -*-
import sys
operator1= sys.argv[1]
operation= sys.argv[2]
operator2= sys.argv[3]
try:
    operator1 = float(sys.argv[1]) 
    operator2 = float(sys.argv[3])
except ValueError:
    sys.exit("Error: Non numerical Parameters")
from calcoo import Calculator 
class CalculatorChild(Calculator):
    def multiply(self):                                  
        return float(operator1) * float(operator2)
    def divide(self):
        if operator2 == 0:
            print "Division by zero is not allowed."
        else:
            return float(operator1) / float(operator2)

if operation == "sum":
    print CalculatorChild().sumatory()
elif operation == "substract":
     print CalculatorChild().substract()

elif operation == "multiply":
    print CalculatorChild().multiply()

elif operation == "divide":
     print CalculatorChild().divide()

else:
    print "Error, operation not supported."

calcoo.py を実行するとすべて正常に動作しますが、たとえば python calcoochild.py 3 sum 2.1 を実行すると 5.1 が 2 回出力され、乗算すると次のように出力されます。

Error, operation not supported
6.3

したがって、CalculatorCHild は sumatory メソッドと substract メソッドを継承するだけでなく、クラスの外部にある if 句も実行するようです。解決策を見つけようとしましたが、同じ結果が得られ続けます。誰かが私を助けてくれることを願っています、事前に感謝します。

4

1 に答える 1

2

をインポートすると、最上位のすべてのコードが実行されcalcooますこれには、値の解析が含まれsys.argvます。

モジュールをスクリプトとして実行するときにのみ実行する必要があるものはすべて、モジュール名のテストによって保護されたブロックに移動します。名前が次の場合__main__、コードはスクリプトとして実行されます。それ以外の場合は、モジュールとしてインポートされました。

class Calculator():
    def sumatory(self):                                   
        return float(operator1) + float(operator2)
    def substract(self):
        return float(operator1) - float(operator2)

if __name__ == '__main__':
    import sys
    operator1= sys.argv[1]
    operation= sys.argv[2]
    operator2= sys.argv[3]
    try:
        operator1 = float(sys.argv[1]) 
        operator2 = float(sys.argv[3])
    except ValueError:
        sys.exit("Error: Non numerical Parameters")

    if operation == "sum":
        print Calculator().sumatory()
    elif operation == "substract":
         print Calculator().substract()
    else:
        print "Error, operation not supported."

をインポートするとcalcoo、クラスのみCalculator定義されます。残りのコードは実行されません。

于 2013-09-27T09:10:47.013 に答える