2

栄養計算機を作成しようとしていますが、init () に関して少し問題があります。

    def main():
        print "Welcome to the MACRONUTRIENT CALCULATOR"
        User_nutrition = get_data()     
        User_nutrition.calorie_budget()


    class get_data(object):
        def __init__(self, calorie_deficit):
            self.calorie_deficit = calorie_deficit
        def calorie_bugdet(self):                                   # ask for calorie deficit
            self.calorie_deficit = float(input("Enter you calorie deficit: "))



    if __name__ == "__main__":
        main()

エラーが発生します:

           TypeError: __init__() takes exactly 2 arguments (1 given)

ただし、ドキュメントの例を見ると、

    class Complex:
        def __init__(self, realpart, imagpart):
           self.r = realpart
           self.i = imagpart

結構です!私は少し混乱しています。init (self) がオブジェクトを初期化し、メモリにスペースを割り当てるのに役立つことは知っていますが、それについて私が知っているのはそれだけです。initと self について知っておくべき情報が他にありませんか?

4

2 に答える 2

6

まず、__init__によってカスタマイズされたメモリ内のオブジェクトにスペースを割り当てません__new____init__インスタンスは、呼び出された時点ですでに作成されています。この場合、次の 2 つのパラメーターを受け入れます。

class get_data(object):
    def __init__(self, calorie_deficit):
        self.calorie_deficit = calorie_deficit

1 つ目はインスタンス (暗黙的に渡される) であるため、渡す必要がある唯一の引数はcalorie_deficit. ただし、あなたのmain()呼び出しでは:

User_nutrition = get_data()

その引数を渡さないので、インスタンスのみが渡されます。したがって、エラー:

TypeError: __init__() takes exactly 2 arguments (1 given)
于 2013-05-30T12:09:13.327 に答える