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)

あなたのコードへのコメントによると、明確な危険信号は確かにありません。returnただし、sal関数の最後のステートメントは必須ではありません。そこにあるのは問題ではなく、私の目を引いただけです。

また、あなたが尋ねたので、私はこれを指摘したいと思います。コーディング標準を守るようにしてください。それをあなた自身または他の誰かのものにしましょう。重要なのは一貫性です。しかし、PEP-8は一般的にPythonで受け入れられているスタイルです。あなたはあなたがそれに固執するのを助けるあなたのエディタのためのプラグインさえ持っています。ここにリンクされているスタイルガイドを読むことをお勧めします。

于 2013-03-12T19:06:32.700 に答える