When creating a class when do I need to use init()?
For the code below, when we create the PartTimeEmployee() class can we just inherit the init() from the Employee() class? Or should we retype it?
I found that both codes worked:
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
and
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
Is there some kind of best practice here?
No; __init__ is inherited like any other method. Because of this, however, you have to take special precautions when you do override it. For example, if we have a Person class:
class Person(object):
    def __init__(self, name):
        self.name = name
We want to make a new class named Employee that extends it to add a title attribute. We could repeat the logic in the Person constructor:
class Employee(Person):
    def __init__(self, name, title):
        self.name = name
        self.title = title
But if Person does something more involved, you probably don't want to do that. Instead, you need to use super to explicitly call the superclass's __init__:
class Employee(Person):
    def __init__(self, name, title):
        super(Employee, self).__init__(name)
        self.title = title
But in the simple case where the subclass has no additional initialization, feel free to omit __init__; it will indeed be inherited from the superclass appropriately.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With