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

9

问题在于:

User_nutrition = get_data()   # one argument self
# and
def __init__(self, calorie_deficit): # two arguments

你应该做

User_nutrition = get_data(5) # add one argument
# or
def __init__(self, calorie_deficit = 0): # make one argument default
于 2013-05-30T12:09:04.633 回答
6

首先,__init__不为内存中的对象分配空间,这是由__new__. 实例已经被__init__调用点创建。在这种情况下,您接受两个参数:

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

第一个是实例(隐式传递),因此您需要传递的唯一参数是calorie_deficit. 但是在您的main()电话中:

User_nutrition = get_data()

您没有传递该参数,因此仅传递了实例。因此错误:

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