2013-03-12 3 views
1

는 : 무엇을는 init 함수 파이썬의 내부 메소드를 호출이 코드에 문제가 있어요

Traceback (most recent call last): 
    File "taxableincome.py", line 35, in <module> 
    main() 
    File "taxableincome.py", line 33, in main 
    salaryLister = Money(x) 
    File "taxableincome.py", line 7, in __init__ 
    sal(self.salary) 
NameError: global name 'sal' is not defined 

: 전역 이름 '염'일

import math 

class Money(object): 

    def __init__(self, salary): 
     self.salary = salary 
     sal(self.salary) 

    def sal(self, x): 
     y = (x - (((x * 0.22) + 6534)) - (1900.9408 + ((x - 37568)*.077))) 
     print '-----------------------------------------------------------' 
     print 'monthly income before tax will be: ${0:.2f}' .format(x/12) 
     print 'bi-weekly income before tax will be: ${0:.2f}' .format(x/24) 
     print 'Hourly after tax: ${0:.2f}' .format(x/24/70) 
     print '-----------------------------------------------------------' 
     print 'Income after tax will be: ${0:.2f}' .format(y) 
     print 'Monthly after tax: ${0:.2f}' .format((y/12)) 
     print 'bi-weekly after tax: ${0:.2f}' .format((y/24)) 
     print 'Hourly after tax: ${0:.2f}' .format(y/24/70) 


     answer = raw_input('Do you want to do this again?\nType [Y] or [N]: ') 
     if(answer == 'Y'): 
      sal(x) 
     else: 
      print 'Thank you!' 
      return 


def main(): 

    x = input('Enter your taxable income: ') 
    salaryLister = Money(x) 

main() 

역 추적이 보여 정의되지 않았습니까?

제 디자인에 대한 의견을 언제든지 보내주십시오. 나는 배우고 싶다. 당신이 파이썬에서 클래스의 인스턴스 메소드를 호출하는 방법을

답변

2

사용 self.sal이 그것이 필요합니다, 당신이 메서드 서명을 보면이 파이썬에서 어떻게 작동

, 당신은 기본적으로

def sal(self, salary) 

이된다 클래스 참조를 첫 번째 변수로 사용합니다. 당신이 self.sal을 할 때 파이썬에서 당신은이 같은 메소드를 호출 할 수

Money.sal(self, salary) 

로 변환하지만, 권장되는 방법은 코드에 대한 의견으로 당

self.sal(salary) 

이다, 확실히이 없습니다 어떤 명백한 붉은 깃발. sal 함수에서 마지막 return 문은 필요하지 않지만. 그게 문제가 아니라, 내 눈을 사로 잡은 것.

내가 물었 기 때문에, 나는 이것을 지적하고 싶다. 코딩 표준을 따르십시오. 그것은 당신이나 다른 누군가의 것으로 삼으십시오. 중요한 것은 일관성입니다. 그러나 PEP-8은 일반적으로 파이썬에 허용되는 스타일입니다. 심지어 편집자를위한 플러그인도 있습니다. here에 링크 된 스타일 가이드를 읽어 볼 수 있습니다.

관련 문제