2013-03-12 87 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的样式指南。