在init函数python中调用一个方法

时间:2013-03-12 19:04:45

标签: python-2.7 init

我遇到此代码的问题:

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

也可以对我的设计发表评论。我很乐意学习。

1 个答案:

答案 0 :(得分:2)

使用self.sal,这是你在python

中调用类的实例方法的方法

如何在python中工作,如果你看一下方法签名

def sal(self, salary)

基本上,它需要类引用作为第一个变量。在python中,self.sal转换为

Money.sal(self, salary)

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

self.sal(salary)

根据你的代码评论,肯定没有任何明确的危险信号。虽然sal函数中的最后一个return语句不是必需的。它不是问题,只是引起我注意的东西。

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