我遇到此代码的问题:
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'未定义是什么意思?
也可以对我的设计发表评论。我很乐意学习。
答案 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的样式指南。