2013-03-12 103 views
1

我有這個代碼的問題:調用初始化函數蟒蛇的內部方法

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() 

回溯顯示了這個:

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 

是什麼: 全局名稱「SAL」是沒有定義的意思?

隨時對我的設計作出評論。我很想學習。

回答

2

使用self.sal,你這是怎麼調用的python類實例的方法

這是如何工作的Python是,如果你看一下方法簽名你有

def sal(self, salary) 

基本上,它需要的類參考作爲第一個變量。而在蟒蛇當你self.sal將其轉換爲

Money.sal(self, salary) 

您也可以這樣調用的方法,但是推薦的方法是

self.sal(salary) 

按你的代碼的註釋,肯定不是任何明顯的紅旗。儘管sal函數中的最後return語句不是必需的。它在那裏沒有問題,只是引起了我的注意。

此外,既然你問了,我想指出。請儘量保持編碼標準。讓它成爲你自己或別人的。重要的是一致性。但是PEP-8通常是Python的公認風格。你甚至有編輯器的插件可以幫助你堅持下去。您可能需要閱讀鏈接here的樣式指南。