访问父类方法错误

时间:2017-10-19 13:24:55

标签: python-2.7 inheritance

我正在尝试学习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

1 个答案:

答案 0 :(得分:1)

在Python 2.7中,旧层次结构有剩余部分。并非所有类都继承自{3},这是Python 3中的默认值。如果您没有显式继承object,Python将使用旧样式对象,而object失败则依赖于此。

您需要做的就是明确确保所有对象最终都继承Super

object

在Python 3中,这是“固定的”。

另一种方法是放弃超级使用方法作为类方法,这将适用于两种类型的对象:

class Person(object):