Объясните как работает метод класса
Делаю задачку, где надо написать класс "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 шт):
Возвращайте созданный экземпляр класса из метода 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, из-за чего и была ошибка.