Объясните как работает метод класса

Делаю задачку, где надо написать класс "Employee", у которого есть конструктор и метод который принимает данные (имя, фамилия, зарплата), которые передаются вместе разделенные "-" Пример: 'John-Silverhand-6000'

Вроде метод работает, разделяет данные и передает их конструктору, но потом при выводе отдельного аргумента инстанций, вылезает ошибка AttributeError: 'NoneType' object has no attribute 'salary' Хочу понять в чем ошибка, и как более корректнее использовать метод класса. Прошу объяснить не понимающему (Саму задачу решил более простым способом, хочу применить именно метод класса для практики)

class Employee():
    def __init__(self, first_name, last_name, salary):
        self.first_name = first_name
        self.last_name = last_name
        self.salary = salary 
    @classmethod    
    def from_string(cls, information):
        first_name, last_name, salary = information.split('-')
        cls.__init__(cls,first_name, last_name, salary) 
        # до этого пробовал использовать 
        # Employee.__init__(cls,first_name, last_name, salary)
    
b = Employee.from_string('John-Silverhand-6000')
print(b.salary)

Ответы (1 шт):

Автор решения: CrazyElf

Возвращайте созданный экземпляр класса из метода from_string. Кроме того, создать экземпляр класса можно проще, стандартным образом, а не вызывая __init__ в явном виде, хотя ваш метод тоже работает, но он излишен:

    @classmethod    
    def from_string(cls, information):
        first_name, last_name, salary = information.split('-')
        return cls(first_name, last_name, salary)
        ^^^^^^

При создании экземпляра класса указатель на созданный экземпляр возвращается конструктором автоматически, из __init__ для этого не нужно ничего возвращать, оно само. А вот из вашего метода автоматически уже ничего не возвращается. Поэтому в b получался None, из-за чего и была ошибка.

→ Ссылка