перевести объект в класс наследник python
Допустим приходит человек на собеседование и мы добавляем его в базу:
class People:
def __init__(self, first_name, last_name, phone_number):
self.first_name = first_name
self.last_name = last_name
self.phone_number = phone_number
man1 = People('Ivan', 'Ivanov', "+79998887766")
Нас человек устроил, он уже есть в базе и мы хотим присвоить ему новый статус "сотрудник":
class Employers(People):
def __init__(self, first_name, last_name, phone_number, id, salary):
super().__init__(first_name, last_name, phone_number)
self.id = id
self.salary = salary
man1 = People('Ivan', 'Ivanov', "+79998887766", 11, 100000)
Есть способ присвоения нового класса, при этом, все параметры что бы сами передались дальше в класс наследник, сократив при этом передаваемые параметры?
class Employees(People):
def __init__(self, id, salary):
self.id = id
self.salary = salary
man1 = man1(Employees(11, 100000)) #как-то так ?
Ответы (2 шт):
Автор решения: Xander
→ Ссылка
class People:
def __init__(self, first_name, last_name, phone_number):
self.first_name = first_name
self.last_name = last_name
self.phone_number = phone_number
class Employer(People):
def __init__(self, first_name, last_name, phone_number, id_, salary):
super().__init__(first_name, last_name, phone_number)
self.id = id_
self.salary = salary
@classmethod
def from_people(cls, people_object, id_, salary):
employer_obj = cls(
people_object.first_name,
people_object.last_name,
people_object.phone_number,
id_,
salary,
)
return employer_obj
man1 = People('Ivan', 'Ivanov', "+79998887766")
man1 = Employer.from_people(man1, id_=11, salary=100000)
Автор решения: Алексей Тишкин
→ Ссылка
Я тут подумал, а что, если для класса People добавить метод:
def go_to_employees(self, id_, salary):
self.__class__ = Employer
self.id_ = id_
self.salary = salary
Это будет полноценным объектом класса Employer? И ещё, можно как-то получить список всех объектов класса, или единственный способ это создать локальную переменную класса, и при инициализации нового объекта её пополнять?