创建类时何时需要使用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
这里有什么样的最佳做法吗?
答案 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__
;它确实会从超类中适当地继承。