我正在尝试按编号从字典中获取对象



new_worker函数创建一个新的Employee对象,并根据worker_number值将其添加到Workers字典中。下一个get_worker_by_id函数应该得到给定的对象,但是程序给出了KeyError。

from employee import Employee
Workers = {}
def main():
new_worker()
get_worker_by_id()

def new_worker():
worker_name = input('Введите имя сотрудника: ')
worker_number = input('Введите его номер: ')
worker_depart = input('Введите его отдел: ')
worker_post = input('Введите его должность: ')
Workers[worker_number] = Employee(worker_name, worker_number, worker_depart, worker_post)
def get_worker_by_id():
id = (input('Чтобы найти сотрудника введите введите его номер: '))
print(Workers[id])
if __name__ == '__main__':
main()
class Employee():
def __init__(self, name, number, depart, post):
self.__name = name
self.__number = number
self.__depart = depart
self.__post = post
def set_name(self, name):
self.__name = name

def set_number(self, number):
self.__number = number
def set_depart(self, depart):
self.__depart = depart
def set_post(self, post):
self.__post = post
def get_name(self):
return self.__name
def get_number(self):
return self.__number
def get_depart(self):
return self.__depart

def get_post(self):
return self.__post
def __str__(self):
return 'Имя сотрудника: ' + self.__name() 
+ 'nНомер сотрудника: ' + self.__number 
+ 'nОтдел сотрудника: ' + self.__depart 
+ 'nДолжность сотрудника: ' + self.__post

在下面的函数

def get_worker_by_id():
id = (input('Чтобы найти сотрудника введите введите его номер: '))
print(Workers[id]) # <---- This line

如果您输入的id尚未添加到Workers字典中,则需要处理此问题。你可以使用两种方法

  1. Try-except
def get_worker_by_id():
id = (input('Чтобы найти сотрудника введите введите его номер: '))
try:
print(Workers[id])
except KeyError:
print("Worker does not exists")
  1. 为字典使用.get()方法
def get_worker_by_id():
id = (input('Чтобы найти сотрудника введите введите его номер: '))
print(Workers.get(id, "Worker does not exists"))

同样,我可以看到在Employee Class,__str__方法

def __str__(self):
return 'Имя сотрудника: ' + self.__name()   # <---- This line
+ 'nНомер сотрудника: ' + self.__number 
+ 'nОтдел сотрудника: ' + self.__depart 
+ 'nДолжность сотрудника: ' + self.__post

删除函数调用(self.__name() -> self.__name),因为__name是类变量而不是函数!

还有一件事,不要使用变量id,因为它是python中的内置函数,你实际上是在重写它。尝试使用worker_id代替!:)

相关内容

  • 没有找到相关文章

最新更新