一个类可以继承__init __()函数吗? (蟒蛇)

时间:2013-10-06 03:43:36

标签: python class

创建类时何时需要使用init()?

对于下面的代码,当我们创建PartTimeEmployee()类时,我们可以从Employee()类继承init()吗?或者我们应该重新输入它?

我发现这两个代码都有效:

class Employee(object):

    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

class Employee(object):

    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 __init__(self,employee_name):
        self.employee_name = employee_name

    def calculate_wage(self,hours):
        self.hours = hours
        return hours * 12.00

这里有什么样的最佳做法吗?

1 个答案:

答案 0 :(得分:4)

没有; __init__与任何其他方法一样继承。但是,因此,当 覆盖它时,您必须采取特殊预防措施。例如,如果我们有Person类:

class Person(object):
    def __init__(self, name):
        self.name = name

我们想要创建一个名为Employee的新类,扩展它以添加title属性。我们可以在Person构造函数中重复逻辑:

class Employee(Person):
    def __init__(self, name, title):
        self.name = name
        self.title = title

但如果Person更多地涉及到某些事情,那么您可能不希望这样做。相反,您需要使用super显式调用超类__init__

class Employee(Person):
    def __init__(self, name, title):
        super(Employee, self).__init__(name)
        self.title = title

但是在子类没有额外初始化的简单情况下,可以省略__init__;它确实会从超类中适当地继承。