3

创建类时,什么时候需要使用 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

这里有某种最佳实践吗?

4

1 回答 1

7

不; __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__; 它确实会适当地从超类继承。

于 2013-10-06T03:48:06.143 回答