'In the method "from_dash" when we return "cls(*string.split("-"))" , what exactly is being assigned to the object "karan"? Please someone explain me

class Employee:

        def __init__(self, aname, asalary, arole):
        self.name = aname
        self.salary = asalary
        self.role = arole

    def printdetails(self):
        return f"The Name is {self.name}. Salary is {self.salary} and role is {self.role}"

    @classmethod
    def change_leaves(cls, newleaves):
        cls.no_of_leaves = newleaves

    @classmethod
    def from_dash(cls, string):
        # params = string.split("-")
        # print(params)
        # return cls(params[0], params[1], params[2])
        return cls(*string.split("-"))  #what is happening from this point exactly?


harry = Employee("Harry", 255, "Instructor")
rohan = Employee("Rohan", 455, "Student")
karan = Employee.from_dash("Karan-480-Student")

print(karan.printDetails())

Here as per code, object "karan= Employee.from_dash("Karan-480-Student")", But i want to understand what exactly is happening from the point we return cls(*string.split("-")) from class method "from_dash"? Like for karan object are we passing the returned tuple to the init constructor of Employee class and assigning "karan" to name, "480" to salary and "Student" to role? or something else is going on ?



Solution 1:[1]

return cls(*string.split("-"))

will evaluate to

return cls(*["Karan", "480", "Student"])

The cls's __init__ will be called, in our case, the cls is Employee, who's __init__ needs aname, asalary, arole.

In our expanded statement, we have a list of 3 values, which will be unpacked (thanks to the * operator) and mapped to the corresponding element in the __init__ method.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Tharun K