我正在尝试学习Python中的超级实现,我在SO上尝试了各种帮助线程,但我无法实现以下代码:
class Person:
def __init__(self, first, last, age):
self.firstname = first
self.lastname = last
self.age = age
def __str__(self):
return self.firstname + " " + self.lastname + ", " + str(self.age)
class Employee(Person):
def __init__(self, first, last, age, staffnum):
super(Employee, self).__init__(first, last, age)
self.staffnumber = staffnum
def __str__(self):
return super(Employee, self).__str__() + ", " + self.staffnumber
x = Person("Marge", "Simpson", 36)
y = Employee("Homer", "Simpson", 28, "1007")
print(x)
print(y)
上面代码中的这种语法有什么问题?
return super(Employee, self).__str__() + ", " + self.staffnumber
答案 0 :(得分:1)
在Python 2.7中,旧层次结构有剩余部分。并非所有类都继承自{3},这是Python 3中的默认值。如果您没有显式继承object
,Python将使用旧样式对象,而object
失败则依赖于此。
您需要做的就是明确确保所有对象最终都继承Super
:
object
在Python 3中,这是“固定的”。
另一种方法是放弃超级使用方法作为类方法,这将适用于两种类型的对象:
class Person(object):