2016-08-24 35 views
0

所以這是我的計算,我試圖做的是要了解類裝飾更好我已經在Python中用OOP方式創建了一個簡單的計算器。我得到一個錯誤信息,說我的變量沒有被定義

class Calc(): 

    @staticmethod 
    def add(x, y): 
     return x + y 

    . 
    . 
    . 

    @staticmethod 
    def div(x, y): 
     return x/y 

    @staticmethod 
    def get_numbers(): 
     num1 = int(input("Enter first number: ")) 
     num2 = int(input("Enter second number: ")) 
     return num1, num2 

    @staticmethod 
    def get_operator(): 
     operator = input('Please enter an operator (+, -, *, /): ') 
    return operator 

    @classmethod 
    def calculate(cls): 
     cls.get_numbers() 
     cls.get_operator() 
     if operator == '+': 
      print(add(num1, num2)) 
     elif operator == '-': 
      print(sub(num1, num2)) 
     elif operator == '*': 
      print(mul(num1, num2)) 
     elif operator == '/': 
      print(div(num1, num2)) 


Calc.calculate() 

當我運行它,我得到這個:

Traceback (most recent call last): 
    File "calc_feltoltesre.py", line 44, in <module> 
    Calc.calculate() 
    File "calc_feltoltesre.py", line 32, in calculate 
    get_numbers() 
NameError: name 'get_numbers' is not defined 

我不知道爲什麼操作符和num1和num2在範圍中不可見。

+0

你回溯,你貼不用排隊的代碼。請注意,您發佈的代碼使用'cls.get_numbers()',但回溯沒有'cls.'前綴。你確定你*保存了*你的工作嗎? –

+2

另外,爲什麼要使用類* *當所有你有類方法和靜態方法?你也可以將這一切都轉化爲模塊中的功能。 –

+0

僅供基礎練習。它可以幫助我解決裝飾者的基礎問題。 – dmbdnr

回答

1

您的calculate方法有一些問題。

首先,要訪問您的函數get_numbers()get_operator()返回的值,您需要將值存儲在變量中。
其次,你還需要添加cls.addsubmuldiv電話(print語句中),或者它會給你一個NameError因爲沒有定義這些方法。

嘗試了這一點:

@classmethod 
def calculate(cls): 
    num1, num2 = cls.get_numbers() 
    operator = cls.get_operator() 
    if operator == '+': 
     print (cls.add(num1, num2)) 
    elif operator == '-': 
     print (cls.sub(num1, num2)) 
    elif operator == '*': 
     print (cls.mul(num1, num2)) 
    elif operator == '/': 
     print (cls.div(num1, num2)) 
相關問題