\uu init\uu()的类型错误

2024-05-19 21:14:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试创建一个营养计算器,我有一些关于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()

我得到一个错误:

^{pr2}$

但是,当我看一个文档示例时,我看到了

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

很好!我有点困惑。我知道init(self)有助于初始化对象并在内存中为其分配空间,但我所知道的只有这些。我是否遗漏了关于init和我应该了解的自我的其他信息?在


Tags: selfdatagetinitmaindef计算器class
2条回答

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

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

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

^{pr2}$

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

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

问题在于:

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

你应该这么做

^{pr2}$

相关问题 更多 >