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))