簡體   English   中英

從另一個py文件的類導入方法時重復的結果

[英]Duplicated results when importing methods from a class of another py file

我是python的新手,所以我希望你可以幫我解決這個愚蠢的問題,因為我找不到任何理由讓這個問題發生。 所以,我有一個名為calcoo.py的文件,它有一個名為Calculator的類,可以求和減,然后我在另一個名為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."

calcoochild.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兩次,如果我寫multips它打印:

Error, operation not supported
6.3

所以它就像CalculatorCHild不僅繼承了sumatory和substract這樣的方法,而且它還可以解釋它在類之外的if子句,我試圖找到一個解決方案,但它一直給我相同的結果。 我希望有人可以幫助我,提前謝謝你。

導入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類; 其余的代碼將不會運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM