2016-08-24 2 views
0

그래서 내 계산 '의 정의되지 않은 것으로, 오류 메시지, 더 나은 수준의 장식을 이해를하려고 노력했다저는 파이썬에서 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()이 반환하는 값에 액세스하려면 변수에 값을 저장해야합니다.
둘째, 당신은 또한 (print 문 내부에) 당신의 add, sub, muldiv 통화를 cls.을 추가하거나 다른 그 방법이 정의되어 있지 않기 때문에, 그것은 당신에게 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)) 
관련 문제