Я использую Python для написания класса «Сотрудник», чтобы иметь возможность печатать данные для каждого сотрудника на входе.
Мне нужно написать файл под названием «employee.py», который имеет класс «Сотрудник» и хранит следующие атрибуты: имя, идентификационный номер, отдел и должность.
напишите программу с именем сотрудник_test.py, которая создает три объекта сотрудников для хранения данных
Пример: Сьюзен Мейерс, 47889, бухгалтер, вице-президент.
Я попробовал приведенные ниже коды, но столкнулся с ошибкой модуля и проверил, установлен ли он. Я ожидал увидеть имена, напечатанные вместе с соответствующей информацией.
class Employee
def __init__(self, name, id_num, dep, title):
self.__name = name
self.__id = id_num
self.__dep = dep
self.__title = title
def set_id(self, id_num):
self.__id = id_num
def set_dep(self, dep):
self.__dep = dep
def set_title(self, title):
self.__title = title
def __str__(self):
result = f"{self__name}/t{self.__id/t{self.__dep}/t{self.__title}"
return result
from employee import Employee
def main():
Susan = Employee("Susan Meyers", "47899", "Accounting", "Vice President")
Mark = Employee("Mark Jones", "39119", "IT", "Programmer")
Joy = Employee("Joy Rogers", "81774", "Manufacturing", "Engineer")
print(Susan)
print(Mark)
print(Joy)
main()
Traceback (most recent call last):
File "C:/Users/19013/employee_test.py", line 1, in <module>
from employee import Employee
ModuleNotFoundError: No module named 'employee'
В вашей Traceback имя вашего файла — employee_test.py
, но вы пытаетесь импортировать из employee
. Ваш оператор импорта должен быть следующим:
from employee_test import Employee
Предположительно, у вас есть два файла: один с именем employee_test.py
, а в другом находится оператор импорта и коды под ним.
Обратите внимание: если у вас все находится в одном файле employee_test.py
, оператор импорта не нужен.
Также избавьтесь от ведущих подчеркиваний. Ваш employee_test.py
должен выглядеть так:
class Employee:
def __init__(self, name, id_num, dep, title):
self.name = name
self.id = id_num
self.dep = dep
self.title = title
def set_id(self, id_num):
self.id = id_num
def set_dep(self, dep):
self.dep = dep
def set_title(self, title):
self.title = title
def __str__(self):
result = f"{self.name}\t{self.id}\t{self.dep}\t{self.title}"
return result
и ваш другой файл должен выглядеть так:
from employee_test import Employee
def main():
Susan = Employee("Susan Meyers", "47899", "Accounting", "Vice President")
Mark = Employee("Mark Jones", "39119", "IT", "Programmer")
Joy = Employee("Joy Rogers", "81774", "Manufacturing", "Engineer")
print(Susan)
print(Mark)
print(Joy)
main()
Вы имеете в виду, что employee_test
должен импортировать себя?
Я думаю, что у ОП они есть в разных файлах, но все перепутал. Он даже включил обратную трассировку
Я сильно подозреваю, что ОП, предназначенный для from employee import Employee
, должен быть первой строкой отдельного файла с кодом над ним в отдельном файле (предположительно employee.py
). Кажется, это вряд ли поможет.
Во-первых:
Вы забыли ":" конец Employee
класса.
Во-вторых:
result
неправильно. так и должно быть.
result = f"{self.__name}/t{self.__id}/t{self.__dep}/t{self.__title}"
В-третьих, проверьте, находятся ли ваши сотрудники.py и сотрудник_test.py в одном и том же месте. Я проверил, и это сработало.
Я проверил и исправил проблемы в вашем коде. Полный код и вывод такие:
работник.py будет таким.
class Employee:
def __init__(self, name, id_num, dep, title):
self.__name = name
self.__id = id_num
self.__dep = dep
self.__title = title
def set_id(self, id_num):
self.__id = id_num
def set_dep(self, dep):
self.__dep = dep
def set_title(self, title):
self.__title = title
def __str__(self):
result = f"{self.__name}\t{self.__id}\t{self.__dep}\t{self.__title}"
return result
И это employee_test.py
from employee import Employee
def main():
Susan = Employee("Susan Meyers", "47899", "Accounting", "Vice President")
Mark = Employee("Mark Jones", "39119", "IT", "Programmer")
Joy = Employee("Joy Rogers", "81774", "Manufacturing", "Engineer")
print(Susan)
print(Mark)
print(Joy)
main()
Этот вывод.
Susan Meyers 47899 Accounting Vice President
Mark Jones 39119 IT Programmer
Joy Rogers 81774 Manufacturing Engineer
Несвязанное примечание: просто назовите свои атрибуты без начала
__
и избавьтесь от всех методовset_
. Идиоматический Python не использует методы установки, если только стоимость настройки не чрезвычайно высока (когда необходимо, чтобы установка происходила программно, можно использовать@property
, и доступ к нему будет осуществляться как к атрибуту, а не с использованием вызовов методов).