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' 是什么意思?

也欢迎对我的设计发表评论。我很想学习。

4

1 回答 1

2

使用self.sal,这就是你在python中调用类的实例方法的方式

这在 python 中是如何工作的,如果您查看您拥有的方法签名

def sal(self, salary)

基本上,它需要类引用作为第一个变量。在 python 中,当你这样做时,self.sal它会转换为

Money.sal(self, salary)

你也可以像这样调用方法,但是推荐的方法是

self.sal(salary)

根据您对代码的评论,绝对没有任何明确的危险信号。虽然returnsal 函数中的最后一条语句不是必需的。把它放在那里不是问题,只是引起了我的注意。

另外,既然你问了,我想指出这一点。请尽量遵守编码标准。让它成为你自己的或别人的。重要的是一致性。但是 PEP-8 通常是 Python 公认的风格。你甚至可以为你的编辑器提供插件来帮助你坚持下去。您可能想阅读此处链接的样式指南。

于 2013-03-12T19:06:32.700 回答