我正在尝试学习python(之前的编程经验很少)并且在codeacademy上遇到了关于在子类中覆盖它后从基类调用方法的问题。
这是代码:
class Employee(object):
"""Models real-life employees!"""
def __init__(self, employee_name):
self.employee_name = employee_name
def calculate_wage(self, hours):
self.hours = hours
return hours * 20.00
class PartTimeEmployee(Employee):
def calculate_wage(self, hours):
self.hours = hours
return hours * 12.00
def full_time_wage(self, hours):
super(PartTimeEmployee, self).calculate_wage(self, hours)
milton = PartTimeEmployee("Milton")
print(milton.full_time_wage(10))
不幸的是,它引发了以下情况:
Traceback (most recent call last):
File "python", line 20, in <module>
File "python", line 17, in full_time_wage
TypeError: calculate_wage() takes exactly 2 arguments (3 given)
所以在某个地方,一个变量太多被移交,但是,我无法弄清楚在哪里。
更新1:
通过仅在第17行传递小时数来解决Traceback调用。
然而,现在我的结果是打电话
print(milton.full_time_wage(10))
正如我所料,我给了None
而不是200。
有人可能会告诉我我的错误吗?
由于
答案 0 :(得分:1)
该行必须是:
return super(PartTimeEmployee, self).calculate_wage(hours)
方法调用已经通过self。你必须返回调用方法的结果。
答案 1 :(得分:1)
问题是您传递给该函数的第二个self
。
super(PartTimeEmployee, self).calculate_wage(self, hours)
^
当你将self
传递给super
时,它会自动将超类传递给函数(如果它提供了该函数)。否则,它将在您的类__mro__
中的其他基础中查找该函数。
在文档中阅读更多内容:https://docs.python.org/3.6/library/functions.html#super
答案 2 :(得分:1)
您不需要使用self调用calculate_wage()作为参数之一:
应该是:
class PartTimeEmployee(Employee):
def calculate_wage(self, hours):
self.hours = hours
return hours * 12.00
def full_time_wage(self, hours):
super(PartTimeEmployee, self).calculate_wage(hours)
答案 3 :(得分:0)
因此,上面的所有答案都解决了错误消息。
我的代码没有返回的问题是我忘记了第17行的return
电话 - 我是个白痴......