Python中实例化多级继承的问题

Python中实例化多级继承的问题,python,Python,在测试用例的特定序列中,有一个TypeError:\uuuuu init\uuuu错误 当我在TestCode 2之前使用TestCode 3运行此代码时,有一个TypeError:\uuuu init\uuuu 如果在测试代码2之后运行测试代码3,则不会出现错误并显示输出。为什么? 代码: 测试代码1: 测试代码3: 测试代码2: 在TestCode 2之上运行TestCode 3时出现错误消息: 回溯(最近一次调用上次):文件 “/Users/z10049/PycharmProjects/Q

在测试用例的特定序列中,有一个
TypeError:\uuuuu init\uuuu
错误

当我在TestCode 2之前使用TestCode 3运行此代码时,有一个
TypeError:\uuuu init\uuuu

如果在测试代码2之后运行测试代码3,则不会出现错误并显示输出。为什么?

代码:

测试代码1: 测试代码3: 测试代码2: 在TestCode 2之上运行TestCode 3时出现错误消息:

回溯(最近一次调用上次):文件 “/Users/z10049/PycharmProjects/Q4Lab5/Q4.py”,第52行,在 robot=PizzaRobot()文件“/Users/z10049/PycharmProjects/Q4Lab5/Q4.py”,第38行,在init 厨师。init(self,“Robot”,0,“cooks”,datetime.datetime(2012,9,10))类型错误:init()接受1到5个位置参数,但 有6人被给予


这是因为您对此行中的变量重用了类名
chef

chef = chef("Tom", 5000, "makes food", datetime.datetime(2000, 8, 13))
chef.__init__(self, "Robot",0,"cooks",datetime.datetime(2012, 9, 10))
然后,当您创建
PizzaRobot
对象时,Python尝试在上面这一行创建的对象上调用
\uuuu init\uuuu
方法:

chef = chef("Tom", 5000, "makes food", datetime.datetime(2000, 8, 13))
chef.__init__(self, "Robot",0,"cooks",datetime.datetime(2012, 9, 10))
当Python调用对象上的方法时,它会自动将对象本身作为第一个参数传递给该方法。因此,它将从本质上改变上述调用:

chef.__init__(self, self, "Robot",0,"cooks",datetime.datetime(2012, 9, 10))
这就是为什么你会得到关于6个参数而不是5个参数的错误


如果将类
chef
重命名为
chef
,并将变量保持为
chef
,您将看到一切都将正常工作。

您创建了一个名为
chef
的对象。所以
chef
现在指的是那个对象,而不是你的类
chef
。这就是为什么我们给类一个大写字母。chef.init需要4个参数,Robot会给它发送4个值。这也是为什么我们使用
super()
而不是硬编码哪个类得到
\uuuuu init\uuuuu
方法。该类被称为chef,对象也被称为chef。谢谢你发现了!!
chef.__init__(self, "Robot",0,"cooks",datetime.datetime(2012, 9, 10))
chef.__init__(self, self, "Robot",0,"cooks",datetime.datetime(2012, 9, 10))